1

それで、私は今夜、エラトステネスのふるいに基づいてこのプライムジェネレーターを組み立てる作業に費やしました. コードは次のとおりです。

n = input("What number do you want to calculate to? ")
import time
start = time.time()
def pr(l):
  ln = l+1
  p = range(2, ln)
  for k in p:
    f = range(k, ln, k)
    for f in f[1:]:
       if f in p:
          p.remove(f)
    return p
print pr(n)
end = time.time() - start
print "This took: ",end  

私がやりたいことは、それを少しスピードアップすることだと思います。p.remove(f)関数を次のように変更すると速度が上がると確信していますp[f] = 0が、うまくいきません。私が間違っていることを誰かが知っていますか?それとも、これを行うにはさらに速い方法がありますか?

4

1 に答える 1

0

エラトステネスのふるいの私のバージョンは次のとおりです。

def primes(n): # sieve of eratosthenes
    ps, sieve = [], [True] * (n + 1)
    for p in range(2, n + 1):
        if sieve[p]:
           ps.append(p)
           for i in range(p * p, n + 1, p):
               sieve[i] = False
    return ps

時間を計って、あなたのバージョンと比べてどうだったか教えてください。

于 2013-09-26T10:58:13.173 に答える