2014-06-16 57 views
1
prime = [2] 
while len(prime) <= 1000: 
    i=3 
    a = 0 
    for number in prime: 
     testlist= [] 
     testlist.append(i%number) 
    if 0 in testlist: 
     i=i+1 
    else: 
     prime.append(i) 
     i=i+1 
print(prime[999]) 

試圖制定計算在線課程素數的程序。這個程序永遠不會結束,但我在代碼中看不到無限循環。Python素數計算器

質數是一個數字,只能被一個和它自己除。

我的邏輯是,如果一個數字可以被前面的素數分開,那麼它就不是素數。

+6

在每一次迭代中,'i'都是'3',所以你不會再去尋找素數,只有* 2和3 *,所以你的素數列表永遠不會超過2個元素。 –

+0

但不是最後包含的i = i + 1使迭代向前移動嗎? – user3743825

+0

@ user3743825,除了它在while循環的最開始被設置爲'3'。 – huu

回答

2

正如您對問題的評論指出的那樣,您的代碼中有幾處錯誤。

以下是您的代碼工作正常的版本。

prime = [2] 
i = 3 
while len(prime) <= 1000: 
    testlist = [] 
    for number in prime: 
     testlist.append(i % number) 
    if 0 not in testlist: 
     prime.append(i) 
    i = i + 1 
print prime 
0

我沒有測試過,但你可以像下面創建方法:

def get_prime_no_upto(number): 
    start = 2 
    primes = list(range(start,number)).to_a 
    for no in range(start,number): 
    for num in range(start,no): 
     if (no % num == 0) and (num != no): 
     primes.delete(no) 
     break 
    primes 

,並可以使用它像

print primeno(100) 

喝彩!