2016-11-20 62 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