2016-11-20 74 views
1

我對Python非常陌生,我想創建一個計算素數的程序。爲了更高效,我需要保存素數並使用它們來計算新素數。由於其他部分與問題無關,因此我簡化了此代碼。python:使用特定的列表元素進行計算

我用java腳本之前,我想有這樣的表達:

primnumb = [1,3,5,7,11 ... ] 

if (number % primnumb[i]) != 0: 
primnumb.append(number) 

的問題是,我不能與「primnumb [I]」給我數計算。

我一直在四處尋找,但

for i in primnumb 

不使一個很大的意義,因爲我我不能從列表中選擇一個特定的元素。

感謝您的幫助!

回答

0

您可以用一些質數初始化列表,然後 檢查其他。 我已經初始化素數的清單,2,3,5和7,因此我開始從範圍8

代碼:

primnumbers = [2,3,5,7] 

for i in range (8,100): 

    flag = True 

    for items in primnumbers: 

     if i % items == 0: 

      flag = False 

    if (flag): 

     primnumbers.append(i) 

print primnumbers 
+0

它的工作原理有很多不同的,比我想象的還要但我想我明白了!謝謝! – Hotzenplotz

+0

不客氣! –

+0

我剛用過這個方法,遇到了另外兩件事: 我該如何「告訴」他只檢查小於我的平方根的項目?如果我添加「或我** 0.5」項目:「到」如果我%項目== 0「它並不真正工作... 第二件事會更一般,有沒有一種方法只得到一個從列表中刪除特定項目,而不使用「for i in range()」短語? – Hotzenplotz

0

假設你想在一個有質數高達N高效的方式。

我使用sieve計算素數如下:

import math 
N = 100 
flag = [0]*(N+1) 
# tells whether a number is prime or not, like flag[i]=0 means i is prime other wise not 
primes = [] 
#list of prime numbers is primes 

for i in range(2, int(math.sqrt(N))+1): 
    if(flag[i] == 0): # means i number is prime 
     for j in range(2*i, N+1, i): 
      flag[j] = 1 # sets multiple of i as non prime 
for i in range(2, N+1): 
    if(flag[i] == 0): 
     primes.append(i) 

print primes