数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 11407|回复: 18

[分享]一个几十秒内就可以生成一百五十万个素数的程序

[复制链接]
发表于 2010-9-29 08:25 | 显示全部楼层 |阅读模式
[这个贴子最后由elimqiu在 2010/09/29 01:30am 第 2 次编辑] 这个程序是用 python 写的。在大约 17 秒内结束计算并将结果存入文件(14Mb)。 计算结果是列出前 一百五十万个素数: 2,3,... 这个程序还可以继续算更多的素数。我把结果输入到了MySQL数据库. 利用数据库语言SQL 来找出一个正整数的素数分解。非常方便。 程序如下:
  1. def saveprimes(n,start=0):
  2. if n==2: return [2]
  3. elif n<2: return []
  4. s=range(3,n+1,2)
  5. mroot = n ** 0.5
  6. half=(n+1)/2-1
  7. i=0
  8. m=3
  9. while m <= mroot:
  10. if s[i]:
  11. j=(m*m-3)/2
  12. s[j]=0
  13. while j<half:
  14. s[j]=0
  15. j+=m
  16. i=i+1
  17. m=2*i+3
  18. result = [2]+[x for x in s if x]
  19. if start > 0:
  20. result = result[start:]
  21. print "Count = ",len(result)
  22. result = str(result)
  23. FILE = open("primeL.txt","w")
  24. FILE.writelines(result)
  25. FILE.close()
  26. print "Done!"
复制代码
============================================== 我的计算机不算很快: 2.2Gh 双核, 2Gb Ram 而已。 我的 python 2.7 (免费) 可以处理至少大到 9223372036854775807 (好像还可以大)的正整数。 [br][br]-=-=-=-=- 以下内容由 elimqiu 时添加 -=-=-=-=- python 程序的缩进很重要。如果上面的代码因为在拷贝时有出入,可向我要代码文件。
发表于 2010-9-29 18:37 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

如果把它译成C,快不快?
 楼主| 发表于 2010-9-29 21:19 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

下面引用由技术员2010/09/29 06:37pm 发表的内容:
如果把它译成C,快不快?
其实 python 的底层用的是 C 引擎。但是 C 本身的数据结构很费空间, 这短短的代码译成 C 是会慢些。不过我不是 C 的高手, 只是自己的估计。
代码的思想很简单,就是用筛法。先声明一个很长很长的 array (数串) 首项是2,其余都是奇数。接着的算法就是把是某数的倍数的项重置为0,然后输出非0的项。
发表于 2010-9-29 21:30 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

可惜我不懂python,不然我会用C试一试.
 楼主| 发表于 2010-9-29 22:37 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

下链接可以下到我由此得到的素数列文本:
http://ishare.iask.sina.com.cn/f/10386095.html
发表于 2010-9-30 18:27 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

好可怕的文件,只能用word打开,太大了.
 楼主| 发表于 2010-9-30 20:23 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

如果你用windows, 建议装一个UltraEditor 或者 NotePad++. 后者是免费的。 这种文本到那里面可以被很好地处理。
发表于 2010-9-30 20:27 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

elimqiu不是笨蛋,不愚蠢,不驴打滚,不狗屎堆逻辑,elimqiu不是白痴,elimqiu不是饭桶
发表于 2010-9-30 20:30 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

elimqiu不是笨蛋,不愚蠢,不驴打滚,不狗屎堆逻辑,elimqiu不是白痴,elimqiu不是饭桶,,,不是网痞,,,
 楼主| 发表于 2010-9-30 21:28 | 显示全部楼层

[分享]一个几十秒内就可以生成一百五十万个素数的程序

前 一百五十万个素数 惹动了网痞的警觉。 于是先犬叫几声再说。 犬类也分档次的。一般抵挡的叫得响亮些。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2026-1-2 04:13 , Processed in 0.082673 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表