2013-09-26 52 views
1

因此,我今晚已經花費在基於Eratosthenes篩的基礎上製作這個素材生成器。這裏是代碼:如何替換素描列表中的參數

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這樣的函數會加快速度,但這不起作用。有誰知道我做錯了什麼?還是有更快的做到這一點?

+0

這是哪一種語言?標記語言 – hrv

+0

是的,請執行'p = range(2,l + 1);對於範圍內的k(2,Math.sqrt(l)+1):對於範圍內的f(k * k,l + 1,k):如果f在p中:p.remove(f);'。 –

回答

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 

請火候,讓我知道如何比較您的版本。