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 number
和15 is a prime number
。
哪个错是因为不是,所以我该如何解决?
答案 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