Python中的前100个素数

时间:2015-10-08 04:11:58

标签: python-3.x primes

我是Python的初学者,我有一个关于找到100个素数的问题。我知道有很多方法可以做到,但请帮助我的方法。我发现count的值会增加,但由于某种原因,while循环条件不适用。感谢您的耐心和帮助

from __future__ import print_function
count = 0

while(count <= 20):
    for i in range(2,20):
        for j in range(2,i):
            if i < j:
                print("The number",i,"is prime")
            elif i % j == 0:
                break
        else:
            print("The number",i,"is prime")
            count = count + 1
            print(count)

3 个答案:

答案 0 :(得分:2)

您可以使用Sieve of Eratosthenes查找第一个n素数:

def primes_upto(limit):
    prime = [True] * limit
    for n in range(2, limit):
        if prime[n]:
            yield n # n is a prime
            for c in range(n*n, limit, n):
                prime[c] = False # mark composites

获得前100个素数:

>>> list(primes_upto(542))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, ... ,
 499, 503, 509, 521, 523, 541]

要找到第一个n素数,您可以estimate n-th prime (to pass the upper bound as the limit)或使用an infinite prime number generator并根据需要获取尽可能多的数字,例如,使用list(itertools.islice(gen, 100))

答案 1 :(得分:0)

如果要同时兼顾效率和简单代码,Numpy值得一试。借助一些精美的索引,以下代码可以完成Eratosthenes筛子的工作。

import numpy as np

ns = np.array(range(2,N))
primes = []
last_prime=2
while last_prime:
    primes.append(last_prime)
    ns = ns[ns%last_prime != 0]
    last_prime = ns[0] if len(ns) > 0 else None
print(primes[:100])

然后调整N直到您有100个素数。一个很好的第一猜测大约是100 * log(100)〜460(来自素数定理)。这将产生88个素数。将N增加到600的值,您将有足够的素数。

答案 2 :(得分:0)

这是一个更简单的代码。我们已经循环了从 0 到数字的所有数字,直到我们打印了 100 个素数。

n=0
i=0
while n<100:
    i+=1
    count=1
    for j in range(2,i):
        if i%j==0:
            count=0
            break
    
    if count==1:
        print(i,end=' ')
        n+=1