题目
题目描述
初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
示例:
输入: 3
输出: 1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].
你应该返回 1,因为只有一个灯泡还亮着。
题解
简单数论,对于n个灯泡 进行n轮灯泡开关切换。第 i 轮,每 i 个灯泡切换一次开关。
那么每个灯泡只有在i是x灯泡的因子时才会被切换,而且在会进行n轮切换也就是说x灯泡的所有因子都会被遍历,而对于一个数的因子个数 普遍都是偶数个 也就是n*m=x(n!=m)模式除了平方数会出现n*n=x 也就是说只有平方数是奇数个.那么这道题所求的不就是n以内(包括n)的平方数个数吗,那么对n开个根向下取整就好了
代码
class Solution {
public int bulbSwitch(int n) {
return (int)Math.sqrt(n);
}
}
网友评论