python - 如何让Python上的这段代码运行得更快?

标签 python performance helper

我在 python 上编写了这段代码来解决项目 Euler 问题 #10,但我已经等了 15 分钟(运行此代码),但它仍然没有结束。

请帮助我改进或优化此代码。

这是片段:

def prime (n):
  f = 1 #flag
  for i in range(2,n):
    if n % i == 0:
        f = 0
  return f

s = 0 # Sum
for i in range(2,2000000):
if prime(i) == 1:
    s = i  +  s
print s

最佳答案

import math

def prime (n):
    for i in xrange(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

s = 2 # Sum
for i in xrange(3,2000000, 2):
    if prime(i):
        s += i
print s

对我来说,它的运行时间不到 10 秒。

首先,一旦发现数字是合数,就希望从 prime 返回。

其次,您不想检查偶数。使用 xrange(3,2000000, 2)

跳过它们

第三,不需要检查prime中从2n的所有数字,因为a*b = b *a

由于您使用 Python 2,我已将 range 替换为 xrange,它会更高效一些。

关于python - 如何让Python上的这段代码运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30700339/

相关文章:

python - 如何隐藏我的应用程序的控制台窗口?

reactjs - 一般来说,在单个组件中使用一个或多个 useEffect 钩子(Hook)更好吗?

c - 在 C 中移动数组的最佳方法?

javascript - 使用 Plotly JS 缓慢渲染图像 + slider

c - 单元测试 stub C 辅助方法

ruby-on-rails - 从 Rails Helper 返回多个标签的最佳方式是什么?

macos - STPrivilegedTask 要求为每个任务输入密码

python - 在python中删除带有嵌套子括号的双波浪括号之间的数据

python - 在 PyML 中获取多类问题的召回率(灵敏度)和精度(PPV)值

python - 如何在 python 的单元测试中使用 assertRaises() 来捕获语法错误?