100盏灯问题

文章目录

问题

有100盏灯,编号依次为1, 2, 3…100,电灯全部关着。现在来了100个人,第一个人把所有的灯开关按下;第二个人隔一个灯按下(2,4,6…);第三个人每隔两个灯按下(3,6,9…)…第100个人隔99个灯按下(100),最后还有几盏灯,那几盏灯亮着?

解决

可以看出每个编号的灯被按了几次与其约数的个数有关,比如编号3被按了两次,其有约数1、3。由于每个数的约数往往成对出现,所以一旦这个数是完全平方数,即其是另一个数的平方,那么就有奇数个不同的约数,灯就会亮。

def find_lights(n):
    res=1
    while res**2<=n:
        print(res)
        res+=1

猜你喜欢

转载自blog.csdn.net/qq_38163755/article/details/116503524