万万电子素数表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档