python - Python 需要很长时间才能执行代码
问题描述
我正在使用 PyCharm 社区 2018。我试图找到从 1 到 200 万的素数之和,这是我的代码。
primes = [x for x in range (1,2000000) if all (x%y!=0 for y in range (2,x))]
total = 0
for x in primes:
total = total + x
print (total)
已经20分钟了,我仍然没有输出。你有什么建议让它运行得更快还是我的方法错了?
解决方案
这很可能是因为您查找素数的方法效率低且范围太大。
您的算法是查找素数的蛮力方法,其时间复杂度为 O(n²)。如果您为较小的数字计时您的算法,您会发现随着 增加n
,所用时间不会线性增加,而是实际上是二次的。
+--------+---------------+
| n | time(in sec) |
+--------+---------------+
| 1000 | 0.007979 |
| 2000 | 0.038865 |
| 5000 | 0.137037 |
| 10000 | 0.499688 |
| 20000 | 1.892315 |
| 50000 | 10.29843 |
| 100000 | 1374.101 |
| ... | ... |
+--------+---------------+
我建议你看看埃拉托色尼筛。如果你搜索它,你会发现它的许多实现,无论你想要什么语言。
推荐阅读
- flutter - 飘动的横幅与屏幕重叠
- r - R,不一致的日期格式
- amazon-web-services - 使用无服务器框架与 aws sam 的优缺点是什么?
- css - Reactjs 媒体查询应用
- javascript - 将文本从网站拖放到外部应用程序
- docker - 配置与 docker 桌面中的 Docker 守护程序 json 更新
- javascript - 无法找出遍历中的逻辑缺陷以检查树中是否有特定的子树
- r - 创建分钟。日期和最大值 基于季度、月份、年初至今的日期列
- python - Django -- 动态显示每天创建的图像
- ios - 在 storyboard.instantiate 时发现 nil