查找1至20代码之间的质数而不返回质数2,什么是正确的算法?

时间:2019-07-10 16:12:04

标签: python primes

查找1到20之间的质数

a = []
for i in range(2,20):
    for j in range(2,20):
        if((i % j) == 0):
            break;
        else:
            a.append(i)
return a

这是我得到的输出-

[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19]

我希望输出中也应该包含2

2 个答案:

答案 0 :(得分:3)

您放错了else,这使筛子无法正常工作。此外,内部循环应仅迭代到j == i - 1。正确的代码如下所示:

a = []
for i in range(2,20):
    for j in range(2,i):
        if((i % j) == 0):
            break
    else:
        a.append(i)
return a

区别:在原始代码中,找到了i的任何j(例如i % j != 0)都将附加到a。使用更正后的代码,仅在内部循环未被i终止的情况下才附加break。另外,您的代码还会测试[2, 20[范围内所有数字的可除性,但是即使素数也可以被整除,这就是为什么2不在代码输出中的原因。

答案 1 :(得分:0)

在两个循环的第一个迭代中-i=2j=2。如果条件为true,则内部循环将停止,而不会在a上加上2。