【问题标题】:Summation Of Primes Below a Given Number in Python [duplicate]Python中低于给定数字的素数总和[重复]
【发布时间】:2016-09-11 20:10:59
【问题描述】:

我已经编写了以下代码块来计算低于某个数字的所有素数的总和 - 在这种情况下准确地说是 2 000 000,但是执行需要相当长的时间; 20 秒:

def summation_of_primes_below_n(n):
list = []
sum = 0
for i in range(2, n):
    if checks_if_prime(i) == True:
        list.append(i)
return list
for j in list:
    sum = sum + j
return sum

def checks_if_prime(n):
    if n == 2:
        return True
    import math
    for i in range(2, math.ceil(math.sqrt(n))+1):
        if n%i == 0:
            return False
        elif i == math.ceil(math.sqrt(n)):
            return True

print(summation_of_primes_below_n(2000000))

所以我想知道是否有办法让我的代码更有效率。我将不胜感激适当的建议。另外,我希望您提供更多基本解决方案,因为我是初学者并提供相同的逻辑。非常感谢!

【问题讨论】:

标签: python python-3.x primes


【解决方案1】:

您可以从实施一些更好的算法开始。例如:Sieve of Eratosthenes

或者,如果您对当前的逻辑感到满意,那么一些可以提供帮助的优化:

  • 只检查奇数:

    for i in range(3, n, 2):

  • 只检查表单6n+1, 6n+5的数字

  • 您不需要为每次迭代执行此检查:elif i == math.ceil(math.sqrt(n)):。如果控制超出循环,则数字是素数

  • 您可以将check_prime 转换为generator pattern。可以节省一些冗余并可能改善参考的局部性。

【讨论】:

  • Eratosthenes 的筛子是这里最好的东西,因为我们知道我们想走多远。
  • @RoryDaulton 啊,是的。不知何故错过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2015-12-09
  • 1970-01-01
  • 2021-11-16
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多