答案 0 :(得分:1)
以下是您的功能的最小修复:
def primeNumbers(num):
primes = []
i = 2
while i <= num:
k = 2
isPrime = True
while k*k <= i:
if i%k == 0:
isPrime = False
k += 1
if isPrime:
primes.append(i)
i += 1
return primes
重要的变化是测试while k*k <= i
,它取代了while k*k < num
。
请注意,也可以进行一些效率提升(例如,在设置isPrime
到False
时断开循环,并且仅检查素数除数),但这应该给出正确的结果。
答案 1 :(得分:-1)
尝试此选项以确定素数(using sieve algorithm):
def primes(n):
if n==2: return [2]
elif n<2: return []
s=range(3,n+1,2)
mroot = n ** 0.5
half=(n+1)/2-1
i=0
m=3
while m <= mroot:
if s[i]:
j=(m*m-3)/2
s[j]=0
while j<half:
s[j]=0
j+=m
i=i+1
m=2*i+3
return [2]+[x for x in s if x]
print primes(5)
# prints: [2, 3, 5]