319. 灯泡开关

exiaohu 于 2021-11-15 发布

题目链接:319. 灯泡开关

数学。

考虑 $1, 2, 3, 4, \dots, n$,共 $n$ 个灯泡,其中第 $k$ 个灯泡的开关被拨动几次,取决于 $k$ 有几个不相同的约数。如 $10$,在第 $1, 2, 5, 10$ 次被拨动。而第 $k$ 个灯泡最终是否打开状态,取决于其不相同的约数的数目是奇数还是偶数。考虑到如下事实,若 $a$ 是 $k$ 的约数,那么 $k/a$ 也是 $k$ 的约数。

则若 $k$ 是完全平方数,它有奇数个约数,否则它有偶数个约数。最终亮起的灯泡的数目就是 $1, 2, 3, 4, \dots, n$ 之中有几个完全平方数。$n$ 以内的完全平方数的数目为 $ \lfloor \sqrt{n} \rfloor $。

import math


class Solution:
    def bulbSwitch(self, n: int) -> int:
        return math.floor(math.sqrt(n))