苹果的面灯泡试题,手算有什么比较快的方法?有100盏灯,编了序号1-100,全部打开,然后:(1)编号为2的倍数的灯,
苹果的面灯泡试题,手算有什么比较快的方法?
有100盏灯,编了序号1-100,全部打开,然后:
(1)编号为2的倍数的灯,开着的关上
(2)编号为2的倍数的灯,开着的关上,关着的打开
...
(3)编号为100的倍数的灯,开着的关上,关着的打开
这个问题如果自己编个小程序,很快就能算出答案是10
- C/C++ code
int main(void){ int bubbles[100]={0}; for(int n=1;n<=100;++n){ for(int b=1;b<=100;++b){ if(b%n==0){ int idx=b-1; bubbles[idx]=!bubbles[idx]; } } } int ret=0; for(int c=0;c<100;++c){ ret+=bubbles[c]; } printf("%d\n",ret); return 0;}但是如果要手算,有没有比较好的方法能很快的算出答案呢? 谢谢!
[解决办法]
“(2)编号为2的倍数的灯,开着的关上,关着的打开”
应该是编号为3的倍数的吧?
[解决办法]
就是找100以内有奇数个因子(不算1和自己)的数的个数
好像没啥好办法
[解决办法]
100开平方根即可。因为平方数的因子个数为奇数。
[解决办法]
一个数可以分解为奇数个因子,必然为平方数,因此答案为10,1,4,9,16。。。。100是÷
