【问题标题】:Python Prime Sum Programme [duplicate]Python素数程序[重复]
【发布时间】:2018-11-15 15:36:29
【问题描述】:

我正在尝试使用 python 来解决 Project Euler 的问题。

我遇到的问题是200万以下的所有素数相加。

我的代码:

import math

def isPrime(number):
if number == 2:
    return True
for x in range(2,number):
    if number % x ==0:
        return False
return True

number = 3
ans = 2 
while number<=2000000:
    if(isPrime(number)):
       print(number)
       ans+=number
    number+=2

我认为它可以正常工作,但是处理速度太慢。 有什么办法可以增强吗? (不使用内存中设置的素数)。谢谢!

【问题讨论】:

  • 也许可以试试for x in range(2, int(math.sqrt(number))+1):
  • 感谢范忠。关键字是“Erastothenes 筛”

标签: python algorithm performance math


【解决方案1】:
def is_prime(number):
  if number == 2:
    return True
  for x in range(2, int(math.sqrt(number)) + 1):
    if number%x == 0:
      return False
  return True

如果你确保在给定数字的平方根之前没有数字可以整除给定数字,那么你可以标记它素数。直到number - 1 才需要检查。虽然是很小的改进,但对您的情况可能很重要。

【讨论】:

  • 不小的进步! n vs sqrt(n) 显着降低了复杂性。
【解决方案2】:

将循环运行到数字的平方根。这将降低复杂性。

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2016-04-28
    • 2017-06-04
    • 2014-04-08
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多