考虑第n个灯的最终状态。显然,在第i轮,只要i是n的因子,包括n,都会改变第n个bulb的状态。当bulb的改变次数(因子个数)为偶数时,灯为开,否则,灯为灭。另外考虑n的一个因子p,对应的另一个因子q=n/p显然也是n的因子。也就是说,当p!=q时因子是成对出现的。那么显然,如果n=p^2,那么n的因子个数为奇数个,否则为偶数个。最终n个灯中,只有i为完全平方数的等bulb(i)会开,所以一共有sqrt(n)个灯会开。代码如下:
int bulbSwitch(int n) {
return sqrt(double(n));
}