2

这是为了计算 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
4

1 回答 1

3

数字 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

即所有数字都是所述数字的除数;并且根据上面的证明(它的构造),没有更小的数字。

于 2013-03-12T00:49:47.933 回答