其实逻辑很简单,假设灯泡编号是 1 到 n ,对于第 i 轮,只要编号能整除 i 的灯泡都会被切换,所以根据这个思路可以写出代码: 不出意外地超时了。因为没有想到的点是,对于一个数 k ,它的因子都是成对出现的(a * b = k,那么 a 和 b 都是 k 的因子),除非 k 是完全平方数。因此只需要知道 1 到 n 中有多少个完全平方数即可: