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