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 是某个完全平方数时,其不重复的因数是奇数。
📎 参考
- 无