现在给出一个范围[1, N]编号的灯,现在所有灯都是关的
第一个人把是1的倍数的灯都打开,
第二个人把所有2的倍数的灯打开,
第三个人把所有3的倍数的灯打开,
照着样子算下,问有那些灯是关的,那些是开的?
对于任意一个数字X 属于 [1, N] ,他被开或者关的次数是可以知道的,比如
12号灯会被 1,2,3,4,6,12个人开关,显然可以知道,刚开始是关的,那么
偶数次开关之后还是关的,奇数次之后才是开的,
因为是倍数的原因,我们可以看到,这些数字都是12的因数,
对于指定的X,X的开关是掌握在X的因数的个数上的,
初等数论,一个数X总是可以表示成一系列素数的幂次的积X = 2^n 3^m 5^q......
那么用f(X) 表示数字X的因数个数,即f(X) = (n +1)(m + 1)(q + 1)....
在这里,我们分情况讨论一下
如果所有的n,m,q,......都是偶数的话,f(X)是奇数
如果存在任意一个n(或者m,q) 是奇数的话,那么f(X)是偶数
对于一个数字X,如果他的素数幂次都是偶数的话,数字X是一个平方数
现在我们反推回去,数字X是一个平方数,他的因数个数f(X)是一个奇数,f(X)是奇数的话他的灯是开的