我必须为学校的项目生成素数。继承人要求:Eratosthenes的Sieve是一种优雅的算法,用于查找所有素数到达某个极限n。基本思想是首先创建一个从2到n的数字列表。第一个数字从列表中删除,并作为素数公布,并且从列表中删除最多为n的所有数字的倍数。此过程将继续,直到列表为空。例如,如果我们希望找到最多10个的所有素数,那么该列表最初将包含[2,3,4,5,6,7,8,9,10]。 2被删除并宣布为素数。然后移除4,6,8和10,因为它们是2的倍数。留下[3,5,7,9]。重复这个过程,3被宣布为素数,9被删除,因为它是9的倍数。离开[5,7]。等等。编写一个名为generatePrimes.py的程序,该程序提示用户输入数字n并输出小于或等于n的所有素数。我失去了
答案 0 :(得分:1)
这个问题具有可怕的质量,并不值得回答,但这里有一个描述筛子的功能:
def pSieve(limit):
flags = [True] * limit
flags[0] = flags[1] = False
primes = []
for index, flag in enumerate(flags):
if flag:
primes.append(index)
for n in range(index * index, limit, index):
flags[n] = False
return primes
你可以看到它产生了正确的结果:
>>> pSieve(10)
[2, 3, 5, 7]
>>> pSieve(100)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
答案 1 :(得分:0)
def pSieve(n):
m = (n-1)
b = [True]*m
i,p,ps = 0,3,[2]
while p*p < n:
if b[i]:
ps.append(p)
j = 2*i*i + 6*i + 3
while j < m:
b[j] = False
j = j + 2*i + 3
i+=1; p+=2
while i < m:
if b[i]:
ps.append(p)
i+=1; p+=2
return ps