1

嘿,这是一个运行良好的代码。我正在使用更大的代码,该程序可以快速回答 999999 或 9999999。

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

错误在哪里?

4

2 回答 2

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
于 2012-07-28T12:30:27.827 回答
1

首先,此代码不适用于偶数。您应该编写类似的代码。

def next_prime(n):
   assert(n>0)
   while 1:
      n+=1
      if isprime(n):
          return n

如果您可以使用任何 isprime() 实现。

您可以自己编写它,也可以使用著名的 miller-rabin 算法,只要您有足够的内存来保存计算,该算法对任何素数都可以快速运行。

http://ideone.com/XO74b

于 2012-07-28T12:48:34.017 回答