数学中国

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

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

[复制链接]
发表于 2011-9-20 11:20 | 显示全部楼层 |阅读模式
[这个贴子最后由天山草在 2011/09/20 11:21am 第 1 次编辑]     先简单说说为什么要下载素数表。如果你要用 mathematica 软件算一个简单的有关素数的小问题,那是没有必要下载素数的,因为 mathematica 本身能够以每秒钟 10 万个的速度临时提供给你需要的素数。如果你计算的问题涉及到范围很大、数量很多的素数,那还是先下载了素数表比较合算。    本人是以 0-2 亿、2-4亿、4-6亿、……、498-500亿这样的间隔下载的,就是每个区间的长度是 2 亿(注意并不是 2 亿个素数),这些表可以事后合并,比如说 10 亿间隔的。    下载命令是:For[i = 1932573350, i <= 1940721696, i++, Write["D:\\SSSSSS\\454-456亿.txt", Prime]]    上面这个例子是下载 454亿-456 亿区间内的所有素数,数据存放到 D:\SSSSSS\目录下,文件名是 454-456亿.txt,即是文本文件的格式存放。要注意命令中的文件目录是两条斜杠。    文件下载时间大约是2100-2200秒,即 35 分钟左右。文件大小约 100M,每个素数占一行。如果想压缩一下文件大小,可以将其改造成每行写 10 个素数,这样可以压缩 10M 左右。但是你千万不可以用手工方式来做这件事,那会累死人的,还弄不好。可以运行下面这个 VB 小程序(时间一分钟吧):    rivate Sub form_Click()         Open "d:\ssssss\454-456亿.txt" For Input As 1    ';旧表     Open "d:\ssssss\A454-456亿.txt" For Output As 2  ';新表         k = 0     For i = 1 To 9999999999       If EOF(1) Then Exit For    ';到旧表尾结束运行       Input #1, p                ';从旧表中读一个数           p = Trim(Str(p))           ';转换成字串,并去掉前后空格       Print #2, p; " ";          ';写入新表中       k = k + 1       If k = 10 Then          rint #2,               ';每写入 10 数,换行再写          k = 0       End If     Next i         Close     End Sub     有一个很关键的东西,就是你必须知道每一个 2 亿区间中第一个素数和最后一个素数的编号。就是这个素数是第多少个素数。例如,2 是第一个素数,3 是第二个。这个信息可以看附件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2011-9-20 12:22 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2011-9-20 19:35 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

跟老师学习了!
 楼主| 发表于 2011-9-20 19:57 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

下面引用由awei2011/09/20 07:35pm 发表的内容:
跟老师学习了!
--------------------------------------------------------------------
   “老师”可不敢当,学习嘛,互相学习比较客观。本人既非民科,更非官科,只是一个爱好数学的小小草民。
    想当初,前几年的时候,有位网友给了我一个 1 亿的素数表。再后来,又从另外的软件上搞到了 42 亿内的素数表,就想啊,什么时候能弄到 100 亿内的素数表。现在这个心愿终于实现了, 如果有必要的话,可以下载到 1000 亿的表。那要占用近 50 G 的硬盘空间。现在这个 500 亿的,占了 25 G 的空间。我这台计算机是三年前的,硬盘有 400G 左右吧,将来买个 4000G 大小的就好了。
发表于 2011-9-20 21:24 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

呵呵!俺也是草民,我机子的硬盘500G,对于我来说已经够了。数学几乎不懂,计算机也不是很懂,只是自己闲着的时候学点自己喜欢的。共同学习,玩的开心!
发表于 2011-9-21 01:29 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

其实在Mathematic中没有必要那么麻烦呀,
In[1]:=Prime[PrimePi[200000000]]
Out[1]:=199999991
PrimePi[n]:小于或者等于n的素数的编号。
 楼主| 发表于 2011-9-21 13:20 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

下面引用由awei2011/09/21 01:29am 发表的内容:
其实在Mathematic中没有必要那么麻烦呀,
In=199999991
PrimePi:小于或者等于n的素数的编号。
---------------------------------------------------------
对啊,PrimePi[n] 既是不大于 n 的素数个数,也可以理解为最靠近 n 的那个素数的编号。
发表于 2011-9-21 13:23 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

但是对于申一言说的10^24就没有办法验证了,数字太大了这种方法就不行了。
 楼主| 发表于 2011-9-21 13:33 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

按 awei 的办法,下面这条命令: For[i = 1932573350, i <= 1940721696, i++, Write["D:\\SSSSSS\\A454-456亿.txt", Prime]] 就可以简化成: For[i = 1 + PrimePi[45400000000], i <= PrimePi[45600000000], i++, Write["D:\\SSSSSS\\A454-456亿.txt", Prime]]
发表于 2011-10-2 12:29 | 显示全部楼层

[分享] 如何用 mathematica 下载 0 至 500 亿素数表

请教:2楼的素数表中,栏目“该区间的素数的个数”,是如何计算的?公式是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-14 06:13 , Processed in 0.087546 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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