This question already has answers here:
How to create the most compact mapping n → isprime(n) up to a limit N?
(32个答案)
5年前关闭。
我正在尝试在Python中做一个简单的素数测试。
根据Wikipedia,primality test如下:
我首先排除了偶数(除2以外)作为素数的候选项
然后根据上述规则编写一个函数以检查素数。
这是主要功能,它对8000个主要候选人的列表进行迭代并测试其首要性
问题在于,对于不是质数的数字,
请注意,
(32个答案)
5年前关闭。
我正在尝试在Python中做一个简单的素数测试。
根据Wikipedia,primality test如下:
我首先排除了偶数(除2以外)作为素数的候选项
def prime_candidates(x):
odd = range(1, x, 2)
odd.insert(0, 2)
odd.remove(1)
return odd
然后根据上述规则编写一个函数以检查素数。
def isprime(x):
for i in range(2, x-1):
if x % i == 0:
return False
else:
return True
这是主要功能,它对8000个主要候选人的列表进行迭代并测试其首要性
def main():
end = 8000
candidates = prime_candidates(end)
for i in candidates:
if isprime(i) and i < end:
print 'prime found ' + str(i)
问题在于,对于不是质数的数字,
isprime
函数返回True。 最佳答案
简而言之,您的isprime(x)
检查数字是否为奇数,在if x % 2 == 0
之后立即退出。
尝试进行一些小的更改,以便您实际上可以进行迭代:
def isprime(x):
for i in range(2, x-1):
if x % i == 0:
return False
else:
return True
请注意,
else:
现在是for
循环的一部分,而不是if
语句。10-08 04:37