如何让这个Python代码更快地运行?[项目欧拉问题#7]

Adn*_*nan 3 python performance interpreter

我正在尝试完成Project Euler挑战:

通过列出前六个素数:2,3,5,7,11和13,我们可以看到第6个素数是13.

什么是10 001主数?

我的代码似乎是正确的,因为它适用于小数字,例如6th prime是13.

我如何改进它,以便代码将更快地运行更大的数字,如10 001.

代码如下:

#Checks if a number is a prime
def is_prime(n):
    count = 0
    for i in range(2, n):
        if n%i == 0:
            return False
            break
        else:
            count += 1
    if count == n-2:
        return True

#Finds the value for the given nth term     
def term(n):
    x = 0
    count = 0
    while count != n:
        x += 1
        if is_prime(x) == True:
            count += 1
    print x


term(10001)
Run Code Online (Sandbox Code Playgroud)

更新:

谢谢你的回复.我应该更清楚,我不是要加速翻译或找到更快的解释器,因为我知道我的代码不是很好,所以我正在寻找使我的代码更有效的方法.

Jer*_*ome 11

需要思考的几个问题:

  • 你真的需要检查分区直到n-1?你多久能停下来?
  • 除了2,你真的需要按两个倍数检查除法吗?
  • 3的倍数怎么样?5?有没有办法将这个想法扩展到以前测试的素数的所有倍数?

  • +1有用的提示,虽然我怀疑我们中的许多人(包括OP)将能够提出算法,这导致他们自己...执行前两个可能已经足够解决这个问题了. (2认同)

agf*_*agf 10

Project Euler的目的不是考虑学习编程,而是考虑算法.关于问题#10,你的算法需要比#7等更快.所以你需要找到一种更好的方法来查找素数,而不是更快的方式来运行Python代码.人们通过考虑数学来解决这些问题,而这些问题是你现在使用的计算机速度要慢得多.

在那个问题上,如果您真的需要帮助来思考问题,可以在https://math.stackexchange.com/上询问您的素数算法.