面试题38:灯的状态
问:对一批编号为1~100全部开关朝上开的灯进行以下操作,凡是1的倍数反方向拨一次开关;2的倍数反方向再拨一次开关;3的倍数反方向再拨一次开关。那最后为关闭状态的灯的编号是多少?
答:根据题目我们可以知道,号码为N的灯,拨开关的次数等于N的约数的个数。
要想使灯关闭,约数的个数应该是奇数。
而一般来说,任何一个数N都至少有两个约数,即1和N本身。
其他任何一个约数都是一一对应的(例如6的约数中2和3对应)。
从理论上来讲,每个数的约数的个数都应该是偶数。
只有一种例外的情况,即某数中两个互相对应的约数相等,例如4的约数中2的对应约数也为2。
这样的数才能有奇数个约数。
即N必须为某数的平方。
100以内最大的平方数为100,即10的平方。
最小的平方数为1,即1的平方。
那么100以内的平方数总共只能有10个,如下所示。
12=1
22=4
32=9
42=16
52=25
62=36
72=49
82=64
92=81
102=100
而这些平方数就是所求的编号数。