Python 前100个素数

Python 前100个素数,python,primes,Python,Primes,我知道有很多方法可以找到前100个素数,但请帮我找到方法。我发现count的值在增加,但由于某种原因,while循环条件不适用: 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")

我知道有很多方法可以找到前100个素数,但请帮我找到方法。我发现
count
的值在增加,但由于某种原因,
while
循环条件不适用:

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)
count=0
while(count可用于查找第一个
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
素数,您可以使用或使用并获取所需数量,例如,使用
列表(itertools.islice(gen,100))
您可以使用查找第一个
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
素数,您可以使用或使用并获得所需的任意数量,例如,使用
list(itertools.islice(gen,100))

如果您正在寻找效率和简单代码的混合,Numpy值得一试。通过一些奇特的索引,下面的代码可以实现对埃拉托申烯的筛选

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,您将有足够的素数。

如果您希望混合使用效率和简单的代码,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,您将有足够的素数。

这是一个更简单的代码。我们将所有数字从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

    
n=0
i=0

而n这是一个更简单的代码。我们将所有数字从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

    
n=0
i=0

如果您使用标签所示的
3.x
\uuuuuuuuuu
导入是多余的。同时
while(count@jonsurll:如果问题使现有答案无效,请不要更改问题。如果您使用标签所示的
3.x
,则
\uuuuuuuuuuuuuuu未来
导入是多余的。另外
while(count@JonSurrell:如果该问题使现有答案无效,请不要更改该问题。OP是在寻求代码方面的帮助,而不是改进的素数查找器/生成器。@JonSurrell它回答了标题中的问题。95%以上的访问者来自web搜索引擎。如果OP询问如何编写while循环,答案会有所不同。您重新更正标题不能准确反映问题的内容。如果OP已经阅读并理解了,标题肯定会不同。但标题不是问题,我不同意我们应该忽略OP提出的问题并回答我们决定标题所说的内容。也许更好的做法是建议和编辑请将它添加到标题中。谢谢Jon!我将在下次正确发布它。谢谢您的帮助:-)@EspoirMurhabazi,因为小于
n*n
的复合物被
n
分开,已经在前面标记。按照第一个链接看动画。OP是在寻求代码方面的帮助,而不是改进的prime finder/生成器。@Jonsurll它回答了标题中的问题。95%以上的访问者来自web-s搜索引擎。如果OP问如何编写while循环,答案会不同。你是对的,标题没有准确反映问题的内容。如果OP读过并理解了,标题肯定会不同。但标题不是问题,我不同意我们应该忽略OP问的问题并回答我们决定的标题。也许更好的做法是建议并编辑标题。谢谢Jon!下次我会正确发布。谢谢你的帮助:-)@EspoirMurhabazi,因为小于
n*n
且被
n
划分的组合已在前面标记。请按照第一个链接查看动画。