题目传送
其实相当于就是第i轮,每i个都开关换一下(最开始都是关着的)。
那么一个数的约数轮都能把这个数给开或关一次(9能被 1 3 9各来一次)。
可以看出当约数是奇数个的时候就可以把灯开着。
因为约数都是对称的如8 的约数 1 2 4 8
1 * 8
2 * 4
而9
19
33
所以有奇数个因子,当一个数是完全平方数的时候,就说明那个灯的位置是开着的。那么求一下n之内有多少个完全平方数就可以了。
直接sqrt(n)就是答案,如:17 :sqrt(17)= 4 , 17内有4 3 2 1 这几个数,比开平方小的数都可以
class Solution {
public:
int bulbSwitch(int n) {
return ((int)(sqrt(n)));
}
};