## 题目描述
假设有 N 盏灯(N 为不大于 5000 的正整数),从 1 到 N 按顺序依次编号,初始时全部处于开启状态;第一个人(1号)将灯全部关闭,第二个人(2 号)将编号为 2 的倍数的灯打开,第三个人(3 号)将编号为 3 的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和 3号一样,将凡是自己编号倍数的灯做相反处理。问当第 N 个人操作完之后,有哪些灯是关闭着的?
解法
首先,我们观察样例,会发现输出的数都是完全平方数,而且是 1 到 n 这个范围内的。简单证明一下为什么,因为只有完全平方数的因数个数为奇数,其余数都是偶数,而按动偶数次下也就相当于没按了,所以最后还是亮的(因为一开始灯也都是亮的),那么最后关着的灯就是这些编号为完全平方数的灯了。
我们只需一个循环输出 1 到 n 之间的完全平方数,整个代码时间复杂度只有
代码:
常规做法
标签:偶数,平方,完全,问题,开关,倍数,关闭,编号 From: https://www.cnblogs.com/yu7921/p/18143802