尝试使用python查找最不常见的多重,但为什么我的代码不起作用?

时间:2014-08-28 15:54:17

标签: python math

嗨,我是python的新手。我试图找到最小的正数,它可以被1到20的所有数字整除,但我一直得到20,这显然是错的;我不知道为什么会这样。

def even_divisible():
  x=1
  for i in range(1,21):
    if x%i!=0:
      x+=1
  print x  
even_divisible()

有谁知道为什么?

1 个答案:

答案 0 :(得分:0)

您的代码存在重大的逻辑缺陷;当for循环结束时(20个循环后),将打印x的当前值,而不检查它是否可被适当的数字整除。每次增加for时,都不会从1重新开始x循环。

您需要运行外循环,直到找到合适的x为止;一个while循环,因为我们不知道它会运行多长时间。要最低限度地修复您的代码:

def even_divisible():
    x=1
    while True: # outer loop 
        for i in range(1,21): # inner loop
            if x % i != 0:
                x+=1
                break # break for loop
        else: # for loop ran to end without break
            break # break while loop
    print x  

您可以使用anyall简化内循环。也有一些数学简化;鉴于我们知道x % 20 == 0,我们只需要查看20的倍数,因为所有整数都是1的整数倍,我们可以从2开始:

def evenly_divisible(n):
    x = n
    while True: # outer loop over multiples of n
        if all(x % i == 0 for i in range(2, n+1)): # inner loop over 2-n
            return x
        x += n