100个灯泡全按一遍,奇偶数问题【python】【面试】
100个灯泡按1~100编号,1号同学将编号为1的倍数的灯泡全部摁了一遍(亮),2号同学将编号为2的倍数的灯泡全部摁了一遍(关),3号同学将编号为3的…,100号同学将编号为100的倍数摁了一遍,最后有__10__个灯泡是亮着的.
1)依题意,
灯泡按过的次数等于其编号的所有因数的个数;
(2)开始状态是熄的,后来是亮的,
说明按过的次数是奇数;
(3)所有因数的个数为奇数的自然数只有完全平方数。
1/4/9/16/25/36/49/64/81/100
1本身和平方数一共3个因数
综上,编号是完全平方数的灯泡最后是亮的。
python代码实现:
def LightCount(n):
count=[0 for x in range(0,n)]
for i in range(1,n):
for j in range(1,i):
if (i%j==0):
count[i-1]=count[i-1]+1
#print count
if (count[i-1]%2==0):
print i
LightCount(101)
>>1 4 9 16 25 36 49 81 100