3

素数 10001 を取得するために、いくつかの異なる方法を試しました。

def isPrime(value):
  if ((2**value)-2)%value==0:
    return True

def nthPrime(n):
  count = 0
  value = 1
  while count < n:
    value += 1
    if isPrime(value):
      count += 1
  return value

10001 が引数の場合、これは 103903 を返します。104743 を期待している場合。

私はもう試した:

primes = []
for i in range(2,105000):
  if ((2**i) - 2) % i == 0:
    primes.append(i)

print primes[10001] ---> 103903
4

3 に答える 3

2

あなたの素ふるいが間違っていると思います。各素数を mod で表す isPrime 関数を使用してみてください。これらのいずれかが 0 の場合、その数は合成数です (素数ではありません)。私の知る限り、 isPrime 関数が想定しているように、数値が素数であるかどうかを示す単一の比較はありません。

于 2012-05-19T03:22:14.330 に答える
2

これは Project Euler 用ですか? 私にはおなじみのようです。

TEOUltimus が言ったように、あなたの isPrime 関数は間違っています。数値が素数かどうかを判断する唯一の方法はありません。

Python のシンプルなプライム ジェネレーター

これは、私が推測するあなたの質問にほとんど答えます。

于 2012-05-19T03:26:04.093 に答える
2

素数を生成する関数を作成できます。これは遅いかもしれませんが、機能します。

そうするための私の機能は次のとおりです。

def PrimesSieve(limit):
    np=set()
    p=[2]
    for i in xrange(1,limit+1,2):
            if i == 1: continue
            if {i} & np: continue
            beg=2 if i % 2 == 0 else 0
            for j in xrange(beg,int(limit)+1,i):
                    np.add(j)
            p.append(i)
    return p
于 2015-10-02T11:13:19.210 に答える