🗒️319. 灯泡开关
2024-12-28
| 2024-12-28
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Dec 28, 2024 03:13 AM
初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭第二个。
第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换第 i 个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。
找出并返回 n 轮后有多少个亮着的灯泡。

模拟

超时!!!

数学

通过模拟的方法输出最后灯亮的位置,以 100 为例
100 灯亮的位置:1、4、9、16、25、36、49、64、81、100
我们发现都是平方数的位置灯是亮的,一共 10 个。
数学推导:
灯泡经过 n 轮切换后,处于打开状态,我们需要满足该灯泡切换次数为奇数
对于一个灯泡 i 来说,它会经历切换的次数与其因数的个数有关。例如:
  • 4:1、2、4
  • 6:1、2、3、6
而因数是成对出现的,即对于灯泡 i 来说,有 k 为其因数,就有 i / k 是其因数。因此,只要 k * k = i,约数虽然也是成对出现,但是相同的数。也就是说只有 i 是某个完全平方数时,其不重复的因数是奇数。

📎 参考

  • 【题单】数学算法
  • 1780. 判断一个数字是否可以表示成三的幂的和1414. 和为 K 的最少斐波那契数字数目
    Loading...