计算素数

时间:2016-04-14 09:19:23

标签: python numbers

我是编程的新手,我在互联网上发现了一个显示第1000个素数的问题。但问题是我的代码,但我有一些问题。

.gitignore

问题来自于我有一个像403这样的数字。根据我写的代码是素数,但实际上并不是因为它可以除以13和31。

我提出了一个解决方案,但我不知道该怎么做以及是否有更好的解决方案。如果您帮助我,请尝试保留我的代码,请不要给我全新的代码。

我的解决方案是:

count=0
prime=[]
n=2

while count != 1000:
    if n == 2 or n == 3 or n == 5 or n == 7 or n == 11:
        prime.append(n)
        n=n+1
        count=count+1
    elif n%2 == 0 or n%3 == 0 or n%5 == 0 or n%7 == 0 or n%11 == 0:
        n=n+1
    else:
        prime.append(n)
        n=n+1
        count=count+1

print(prime[999])

所以基本上我试图做的是尝试将数字403分成例如我之前记录的任何其他素数。但由于某种原因,这段代码给了我一个错误。我想告诉程序"将n除以列表中的每个数字"。谢谢你的帮助:)

2 个答案:

答案 0 :(得分:0)

您可以使用“任何”。

In [15]: prime = [2, 3, 5, 7, 11]

In [16]: n = 15

In [17]: any(n%p == 0 for p in prime)
Out[17]: True

In [18]: n = 17

In [19]: any(n%p == 0 for p in prime)
Out[19]: False

In [20]: n = 19

In [21]: any(n%p == 0 for p in prime)
Out[21]: False

基本上,它会告诉你给定的数字是否可以被列表中“任意”的数字整除。

答案 1 :(得分:0)

有几种计算素数的算法,首先需要的是如何判断函数isPrime(n)是返回true还是false,如果需要,这个函数isPrime(n)应该在o(n)之下)。有几种方法可以做到这一点,以下是可能性:

@Html.TextBoxFor(model => model.EndTime, new { type = "date" })

这个会给你素数或者没有复杂度o(n ^ 1/2),对你来说应该足够了,之后你需要做的下一件事就是:

def isPrime(n):
    i = 2;

    while i*i < n:
        if n % i == 0:
            return false
        i = i + 1
    return true;

我还没有尝试过这段代码,但概念应该在那里