|

楼主 |
发表于 2019-3-10 22:30
|
显示全部楼层
Pi8(n)→→178.26229268981000 →→(0,2,4,2,4,6,2,6),显然有正7生素数加一个素数而来(后边加)
Pi8(n)→→475.36611383949400 →→(0,2,4,6,2,6,4,2),它自对称不能有以前的k生素数获得,但是可以有三生素数获得,仍然比较经济(比起用自然数来好的多)
Pi8(n)→→178.26229268981000 →→(0,6,2,6,4,2,4,2),显然有逆7生素数加一个素数而来(前边加)
用时0.63秒,有7生素数表获得8生素数表。4条记录。
CLEAR ALL
SELECT 1
USE e:\用vfp求k生素数数量\素数62个周期.DBF ALIAS 素数表
SELECT 2
USE e:\用vfp求k生素数数量\八生素数正.DBF ALIAS 八素表
SELECT 3
USE e:\用vfp求k生素数数量\七生素数表.DBF ALIAS 七素表
kssj=SECONDS() &&取出开始时间
SELECT 七素表
go 1
DO WHILE NOT EOF()
@ 2,5 say 七素
bpz=七素+6
Kf=INT(SQRT(bpz)) &&求出奇数的开方根
SELECT 素数表 &&打开素数表
LOCATE FOR 素数>=kf &&根据开方根,查找最大素数
DO CASE
CASE EOF() &&如果超出素数表最后一条记录
GO BOTTOM
CASE 素数>kf &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
SKIP -1
ENDCASE
SSS=RECNO()-2 &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
GO 3 &&从第一条记录开始读取素数(3)
FOR j=1 TO SSS &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
IF MOD(bpz,素数)=0 &&以读取的素数为条件,对被判断值求模 【qmz=MOD(bpz,素数)】文本号括着的原在此行语句体部分.特别需要注意的是在用标点符号时,一定改成英文模式及半角状态
EXIT
ENDIF
SKIP &&素数表指针向下移动一个
ENDFOR
IF j>sss
SELECT 八素表 &&打开盛放素数的表
APPEND BLANK &&增加一条空记录
REPLACE 八素 WITH bpz &&将N值付给素数
ENDIF
SELECT 七素表
skip
ENDdo
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
CLEAR ALL
这些程序基本上一致,只做少量更改 |
|