如何使用for循环计算素数

时间:2018-11-11 05:56:16

标签: python loops sieve

s

我尝试制作for i in range(2, 101): for j in range(2, i): if (i % j) == 0: print(i,"is a composite number") break ,但此方法不起作用(4不是质数)

2 个答案:

答案 0 :(得分:2)

您使用的for循环对于查找质数是正确的。我只是要满足另一个条件:if i > 1:。另外,您还想打印素数

for i in range(2, 101):
    if i > 1: # Prime numbers are greater than 1
        for j in range(2, i):
            if (i % j) == 0:
                print(i,"is a composite number")
                break
        else:
            print(i,"is a prime number")

答案 1 :(得分:-2)

您可以像这样修改原始算法:

for i in range(2, 101):
    if all([(i % j) for j in range(2, i)]):
        print(i,"is a prime number")

通常,在这种情况下,最好使用/从既定算法中学习。这是众所周知的算法(Sieve of Eratosthenes)的Python实现,用于生成第一个n素数(代码的信用为tech.io):

def sieve(n):
    primes = 2*[False] + (n-1)*[True]
    for i in range(2, int(n**0.5+1.5)):
        for j in range(i*i, n+1, i):
            primes[j] = False
    return [prime for prime, checked in enumerate(primes) if checked]

一些测试输出:

print(sieve(100))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]