Python 写的计算质数的程序,怎样才可以提高运算效率?

2017-01-05 14:49:19 +08:00
 Bill1

程序代码如下:

import os
primenumber=2
testnumber=primenumber

while True:
	while True:
		testnumber=testnumber-1
		if testnumber==1:
			print(primenumber)
			primenumberwrite=str(primenumber)
			f=open("PrimeNumber.txt",'a')
			f.write(primenumberwrite)
			f.write('\n')
			f.close()
			break
		elif primenumber%testnumber==0:
			break
	primenumber=primenumber+1
	testnumber=primenumber
2546 次点击
所在节点    Python
13 条回复
wwqgtxx
2017-01-05 15:09:00 +08:00
这种没啥复杂度的程序用 c 写,然后 python 调用就行了
iEverX
2017-01-05 15:14:20 +08:00
打表
a87150
2017-01-05 15:17:59 +08:00
换成 c ,可以快几十倍。
Fulminit
2017-01-05 15:20:26 +08:00
换个算法
ty89
2017-01-05 15:22:05 +08:00
你的文件操作不要写在循环的最内层。
可以先放在内存里,累计到一定量之后往文件里写一次
cxbats
2017-01-05 15:23:10 +08:00
打开文件挪到循环外面去
est
2017-01-05 15:31:37 +08:00
这种就不要自己算了。打表。
GoForce5500
2017-01-05 15:35:25 +08:00
这代码有太多值得优化的地方。
优先检查小数而不是大数,小数是更多数的因数,例如被测数为 1000000000 不需要从 999999999 测试到 500000000 ,能被 2 整除然后直接就返回了,立省 500000000 次运算。
尽量减小测试数据范围,测试质数时只需要测试是不是能够被 2~待测数的开方整除就行,比如测试 36 只需要测到 6 即可,一下快 6 倍……
检查最后一位是不是 0 、 2 、 4 、 5 、 6 、 8(需要大于 2),这些数不可能为质数,又能省一部分运算。
Coursera 上普林斯顿大学 Algorithm 的主讲教授 Robert Sedgewick 的课程能帮助你。用他的原话来说就是除非你的算法和数据结构都已经高度优化否则不要依赖超级计算机,好的数据结构和算法才能够真正解决问题。
Bill1
2017-01-05 15:42:49 +08:00
lonelinsky
2017-01-05 15:44:59 +08:00
楼主可以百度一下 线性筛法 , 其实打表更好
loryyang
2017-01-05 15:49:34 +08:00
loryyang
2017-01-05 15:51:02 +08:00
这种问题前人已经深入研究了很多年,站在前人的肩膀上,不要闭门造车
msg7086
2017-01-06 02:58:26 +08:00
1. 质数算法已经很成熟了,如果只是要提升速度的话不如换个算法。
2. 回复可以用 MD ,右下角有选择框可以选 MD 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/332404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX