prime=[2,3,5]
f=7
def next_prime(f): #whenever called, measures the next prime of the list and returns it
j=len(prime)
while j==len(prime):
for x in prime:
if f%x==0:
f+=2
break
else:
prime.append(f)
return f
但是如果我稍微修改一下代码(我想添加x应该小于f **的条件.5),程序就没有结果。
prime=[2,3,5]
f=7
main=[]
power=[]
def next_prime(f):
j=len(prime)
while j==len(prime):
for x in prime:
if (x<int(f**.5)+1) and f%x==0:
f+=2
break
else:
prime.append(f)
return f
错误在哪里?
答案 0 :(得分:2)
这两个版本在我的python解释器(2.7)中运行良好。虽然你的两个版本都不会返回偶数的任何结果,所以你可能应该添加一个检查这个条件:
f=7
main=[]
power=[]
prime = [2,3,5]
def next_prime(f):
#Added check:
if not f%2:
f += 1
j=len(prime)
while j==len(prime):
for x in prime:
if (x<int(f**.5)+1) and f%x==0:
f+=2
break
else:
prime.append(f)
return f
答案 1 :(得分:1)
首先,这些代码甚至不能用于数字。 你应该编写类似的代码。
def next_prime(n):
assert(n>0)
while 1:
n+=1
if isprime(n):
return n
如果你可以使用任何isprime()实现。
你可以自己编写或使用着名的miller-rabin算法,只要你有足够的ram来保存计算,它就可以快速适用于任何素数。