319(灯泡开关)
初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
思路:对于n个灯泡中的其中一个m(1<=m<=n)号灯泡,有以下几种情况
m = 1,必定亮着
m > 1时,m为质数或者非质数
①质数,只有第1次和第m次开关,即m为质数时,灯泡必定关着
②非质数,m = x * y(一组或多组),存在第1, x, y, m次开关。
如果存在x = y,则m必定会亮着,不存在x = y,m必定是关着,
即如果m为平方数,则m亮着,否则,不亮。
该问题就变成了求n以内的完全平方数的个数,return sqrt(n);