万万电子素数表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
万万电子素数表
郭凤鸣
(中国地质大学.武汉,430074)
摘要本程序可以生成万万(一亿)以内的素数,为用户提供五种选择素数的范围:1万、十万、百万、千万、万万。
关键词素数,素数表,程序,Foxpro
在很多研究工作中,往往需要大量的素数,这里提供一种万万电子素数表,即一亿以内的素数表,是一个简单的Foxpro]1[程序,而非表格。有了它,你不需要把大量的数据保存
在纸上或者存储在磁盘上。在需要的时候,只要运行本程序,你可以很方便地选择计算1万以内的素数,也可以计算10万,100万,1000万,万万(1亿)以内的素数。按照程序设计思路对程序略加修改,可以计算10亿、100亿、1000亿…以致更大范围的素数。
算法描述
素数表使用的计算方法是幼拉脱斯展纳(Eratosthenes)筛法]2[,由古希腊时代幼拉脱斯展
纳发明而得名。
算法的基本思想是:要计算不超过N的一切素数,只需要从1,2,3,…,N中把不超过N 的素数的倍数划去就行了。例如N=30,30< 6,小于6的素数是2,3,5。求解N=30以内素数的方法如下:
1 2 3 4 5 67 8910
11 1213 14151617 1819 20
212223 242526272829 30
最后求得30以内的素数是未划线的部分:2,3,5,7,11,13,17,19,23,29。
程序简略流程——如图一
图一程序简略流程
程序清单
** 万万素数表计算程序
set defa to "c:\program files\microsoft visual studio\vfp98\sj\素数表"
set talk off
** 生成100以内的素数,存入库文件Sb00
create table sb00(shuju n )
append blank
replace shuju with 2
for i=2 to 50
append blank
replace shuju with 2*i-1
endfor
delete all for shuju%3=0 and shuju<>3
delete all for shuju%5=0 and shuju<>5
delete all for shuju%7=0 and shuju<>7
pack
go bottom
rn=recno()
** 将Sb00.dbf复制到数组X和库文件bb1备用,sb00空间继续使用
copy to array x for shuju>2
copy to bb1
** 生成10000以内的素数,存入库文件Sb00
n=10000
do js
copy to ssbyw && 将10000以内的素数表保存ssbyw.dbf中
do dy
do while .t.
clear
text
********************************
** 1.计算10万以内的素数 **
** 2.计算100万以内的素数 **
** 3.计算1000万以内的素数 **
** 4.计算1亿以内的素数 **
** 0.退出 **
********************************
endtext
@ 14,10 say "请选择您需要计算的素数1——4?" get xz default space(1) read
do case
case xz="1" && 计算10万以内的素数
n=100000
do js && 调用计算过程
copy to ssbsw && 将10万素数表复制保存
do dy && 调用打印过程
case xz="2" && 计算100万以内的素数
n=1000000
do js
copy to ssbbw
do dy
case xz="3" && 计算1000万以内的素数
n=10000000
do js
copy to ssbqw
do dy
case xz="4" && 计算1亿以内的素数
n=100000000
do js
copy to ssbbw
do dy
case xz="0"
clear
wait window at 20,20 " 停止计算,任意键退出!" cancel
endcase
enddo
procedure js && 计算过程
release x
copy to array x for shuju>2 and shuju lx=alen(x) zap append blank replace shuju with 2 for i=2 to n/2 append blank replace shuju with 2*i-1 endfor for i=1 to lx delete all for shuju%x(i)=0 and shuju<>x(i) pack endfor go bottom rn=recno() return procedure dy && 打印过程 dy