亮灯问题
本题是滴滴出行2016研发工程师笔试题
问题
2015盏灯,一开始全部熄灭,序号分别是1-2015,先把1的倍数序号的灯的开关全部按一次,然后把2的倍数的灯的开关全部按一次,然后把3的倍数的灯的开关全部按一次,以此类推,最后把2015的倍数灯的开关按一次。问最后亮着的灯有多少盏?
解题思路
简单思考之后发现,一个数如果有偶数个约数,则最后是暗的,如果有奇数个约数,则最后是亮的。所有的质数都有两个约数,1和自身,所以质数最后一定是暗的。对于合数,有个有意思的情况,就是除了1和本身之外,还有其他约数,那么这些约数有什么规律呢?我们可以发现,它们一般都会成对出现,比如15还可以分解成3和5,20还可以分解成2和10,或者4和5,一旦成对,最后肯定是偶数个约数,所以最后灯还是暗的。但是这里有个特殊情况,就是平方数!因为它们除了可以分解成成对的两个约数之外,还可以分解成自身乘以自身,这就说明它多出一个约数,比如16,除了分解成1和16,2和8,还可以分解成4和4,所以16的约数有1,2,4,8,16,可以看到它有5个约数,奇数个约数,最后灯是亮的。所以这个问题最后变成2015之内有多少个平方数。1,2,3,4...44,45的平方是2025,就比2015大了,所以最后结果是44。