在python 3中列出从3到21的质数

时间:2018-12-13 02:27:40

标签: python python-3.x

for x in range (3,21):
    if(x%2==0):
        print (x,'is a not a prime number')
    else:
        print (x,'is a prime number')

这是我的代码,但在打印时会显示9 is a prime number15 is a prime number

哪个错是因为不是,所以我该如何解决?

2 个答案:

答案 0 :(得分:0)

您的代码仅检查数字是否为偶数。所有奇数都不是质数。因此,编写一个for循环,检查奇数是否可被小于该数的任何奇数整除。像这样的东西:

对于(3到n)中的i:如果n mod i == 0,则n不是素数。

答案 1 :(得分:0)

def isPrime(N):
    i = 2
    while i**2 <= N:
        if N % i == 0:
            return False
        i+=1
    return True

for i in range(3, 21 + 1):
    if isPrime(i):
        print(i, 'is prime')
    else:
        print(i, 'is not a prime number')

首先,创建一个函数来确定给定数字是否为质数(这不是必需条件,只是一种好习惯)。该函数并不难:它仅从i = 2开始(从1开始没有意义,因为每个数字都可以被它除),然后检查N是否可以被它除。如果是这样,我们已经找到N的除数,因此它不是素数。否则,继续下一个数字:i += 1。循环中最棘手的部分是停止条件:i**2 <= N:我们不必进一步研究,因为如果某些j > i是N的除数,那么还有其他k < i也是N的除数:k * j == N。如果存在这样的k,我们将在到达i * i == N之前找到它。就这样。之后,只需遍历要检查素数的每个数字即可。

顺便说一句,检查一组数字的素数的最佳方法是使用Sieve of Eratosthenes