|
[这个贴子最后由zhaolu48在 2005/08/01 08:28am 第 1 次编辑]
生成不小于某个自然数的n个素数的素数表的一个方法
昨天还在这里找到了一个为证哥猜而找素数表发愁的帖子,今天却找不到了。
素数表里最大的素数能有多大?并且查起来也很麻烦。
对于数论爱好者,编程生成大于某个自然数的素数应该是很容易的一件事情。
如果连这件事情都作不来,我有点怀疑他证明哥猜的能力是否具备。
下面给出一个在VF语言环境下生成大于某个自然数的n个素数的素数表的程序:
先建一个名称为SSB.dbf的数据库,其结构为:
Field 字段名 类型 宽度
1 SS 数值型 20
2 CZ 数值型 8
字段SS是用来存储素数的,
字段CZ是当前素数与前一个素数的差。
由结构知,生成的最大素数要不大于3*10^19
程序名称为SSS.prg:
CLEAR ALL
CLEAR
SET talk off
DIMENSION a(2)
use ssb
acce ';要删除原来的记录吗(删除键入“y”/否则回车) ';to pp
IF pp=';y';
DELETE ALL
PACK
ENDIF
inpu ';输入要生成的素数的下界: ';to p
inpu ';输入要生成的素数的个数: ';to q
q=q-1
sja=TIME()
IF p/2=INT(p/2)
p=p+1
ENDIF
ka=0
m=10^19
kb=0
FOR i=p to m step 2
IF ka>q
EXIT
ENDIF
k=INT(SQRT(i))+1
pb=1
FOR j=2 to k
b=(i/j)*1.000000000000000
c=INT(b)
IF b=c
pb=0
a(1)=0
EXIT
ELSE
a(1)=i
ENDIF
endf
IF pb=0
LOOP
ELSE
IF kb>0
a(2)=a(1)-kb
ENDIF
APPEND FROM ARRAY a
?a(1),a(2)
kb=a(1)
ka=ka+1
ENDIF
endf
sjb=TIME()
SET TALK ON
?sja,'; ';,sjb
用此程序在我的电脑上生成大于10^10的1000个连续素数用时3分零9秒。
|
|