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() 実装を使用できる場合。

独自に作成することも、計算を保持するのに十分な RAM がある限り、任意の素数に対して高速に動作する有名なミラーラビン アルゴリズムを使用することもできます。

http://ideone.com/XO74b

于 2012-07-28T12:48:34.017 に答える