java算法之灯的开关问题

灯的开关问题:

初始状态,有100盏灯,都是亮的。
第一轮,第1,2,3,4,5,6....100盏灯按一下开关。                     1的倍数
第二轮,第2,4,6,8,10......100盏灯按一下开关。         2的倍数
第三轮,第3,6,9,12,15......99盏灯按一下开关。            3的倍数
。。。。。
第100轮,第100盏灯按一下开关。                100的倍数
问,哪些灯是亮着的?


思路:

这个问题,其实之前我专门做过,最后也相通了,可是刚开始看的时候,就没有很快的有思路,当然也可能是思考时间太短了,这个题应该是个经典问题,当学长提出来之后,很快就有学生上去进行了讲解。这也说明了,我真的还很弱,还和大佬存在很大的差距,要继续加油。

回归正题:

这个问题可以转换成求因子分解的个数,就是判断每一盏灯,会被按几次。这样按偶数次数的灯,开关状态不变,按奇数次数的灯,开关变成原来的相反的状态。

举个例子:

第6盏灯: 6=1×6,6=2×3,这样就说明,第6盏灯在第一轮,第二轮,第三轮,第六轮,都会被按一次,除了这几次之外,第六盏灯不会在改变它的开关状态,所以我们可以看到,第6盏灯一共被按里偶数次,所以第6盏灯,最后的状态是亮着的。

第25盏灯:25=1×25,25=5×5,说明,第25盏灯,在第一轮,五轮,二十五轮各被按一次,总共按里奇数次,所以最后的状态是,关着的。

因此这个题,就转换成了求因式分解个数的问题:

那么有什么方法可以求因式分解呢?目前脑袋里的第一想法是暴力,可是暴力求解,如果因式分解也用暴力的话,那还不如直接在原问题上用暴力求解。。。



你可能感兴趣的:(算法)