Python While循环计算最小公共倍数

Python While循环计算最小公共倍数,python,loops,while-loop,Python,Loops,While Loop,这意味着要计算1-20的最小公倍数 我似乎不明白为什么while循环不会结束。有人能帮我吗 i = 1 j = 1 factors = 0 allfactor = False while allfactor == False: while j < 21: if i % j == 0: factors = factors + 1 j = j + 1 else: break

这意味着要计算1-20的最小公倍数

我似乎不明白为什么while循环不会结束。有人能帮我吗

i = 1
j = 1
factors = 0
allfactor = False
while allfactor == False:
    while j < 21:
        if i % j == 0:
            factors = factors + 1
            j = j + 1
        else:
            break
    if factors == 20:
        allfactor = True
        break
    else:
        i = i + 1
        j = 1
        factors = 0
i=1
j=1
系数=0
allfactor=False
当allfactor==False时:
而j<21:
如果i%j==0:
系数=系数+1
j=j+1
其他:
打破
如果系数==20:
allfactor=True
打破
其他:
i=i+1
j=1
系数=0

数字1..20的最小公倍数为232792560

要达到这个数字,你只需要看看数字1到20。你至少需要所有素数:2,3,5,7,11,13,17和19

此外,您还需要另外两个2来计算4,另外两个2来计算16。要得到9分,你还需要另外3分

因此,你最终会:

2 * 2 * 2 * 2 * 3 * 3 * 5 * 7 * 11 * 13 * 17 * 19 = 232792560
您可以很容易地确认,使用Python:

>>> all(map(lambda x: 232792560 % x == 0, range(1, 21)))
True

即,所有数字都是该数字的除数;根据上面的证明(其结构),没有更小的数字。

@poke:你应该把它作为答案发布@DavidRobinson谢谢,完成了,谢谢!那真的很酷。不过,我更感兴趣的是为什么代码没有运行,因为我正在学习Python。您的代码确实可以运行,只是需要很长时间,直到
j
达到
232792560
。您通常会先生成素数来解决此问题,因为您只需要检查素数进行因式分解。要了解这一点,请参阅我对a的回答,它在第一步计算素数,然后允许您快速对数字进行素数分解(这与LCM相反)。