|

楼主 |
发表于 2019-3-4 18:53
|
显示全部楼层
CLEAR ALL
SELECT 1
USE c:\visualfoxpro项目\素数表万.DBF ALIAS 万素
SELECT 2
USE c:\visualfoxpro项目\三生素数生成元19.DBF ALIAS 三生成元19
SELECT 3
USE c:\visualfoxpro项目\三生素数合成结果.DBF ALIAS 三生合成结果
kssj=SECONDS() &&取出开始时间
For N=2 to 323322
@ 3,6 say N
FOR M=4 TO 16 step 6
@ 4,8 say M
X=M+N*30
Y=X/2
T=INT(X/9699690)+1
FOR I=1 TO T
SELECT 三生成元19
go 1
@ 5,10 say 三生元19
SS1=三生元19+(N-1)*9699690
DO WHILE SS1<Y+1
Kf1=INT(SQRT(SS1)) &&求出奇数的开方根
SELECT 万素 &&打开素数表
LOCATE FOR 素数万>=kf1 &&根据开方根,查找最大素数
DO CASE
CASE EOF() &&如果超出素数表最后一条记录
GO BOTTOM
CASE 素数万>kf1 &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
SKIP -1
ENDCASE
SSS1=RECNO() &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
GO 8 &&从第一条记录开始读取素数(3)
FOR j1=1 TO SSS1-7 &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
qmz1=MOD(SS1,素数万) &&以读取的素数为条件,对被判断值求模 【qmz=MOD(bpz,素数)】文本号括着的原在此行语句体部分.特别需要注意的是在用标点符号时,一定改成英文模式及半角状态。
qmz2=MOD(SS1,素数万)
qmz3=MOD(SS1,素数万)
IF qmz1=0 OR qmz2=4 OR qmz3=6
EXIT
ENDIF
SKIP &&素数表指针向下移动一个
ENDFOR
IF j1>sss1-7
SS2=X-SS1
Kf2=INT(SQRT(SS2)) &&求出奇数的开方根
SELECT 万素 &&打开素数表
LOCATE FOR 素数万>=kf2 &&根据开方根,查找最大素数
DO CASE
CASE EOF() &&如果超出素数表最后一条记录
GO BOTTOM
CASE 素数万>kf2 &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
SKIP -1
ENDCASE
SSS2=RECNO() &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
GO 8 &&从第一条记录开始读取素数(3)
FOR j2=1 TO SSS2-7 &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
qmz4=MOD(SS2,素数万) &&以读取的素数为条件,对被判断值求模 【qmz=MOD(bpz,素数)】文本号括着的原在此行语句体部分.特别需要注意的是在用标点符号时,一定改成英文模式及半角状态。
qmz5=MOD(SS2,素数万)
qmz6=MOD(SS2,素数万)
IF qmz4=0 OR qmz5=4 OR qmz6=6
EXIT
ENDIF
SKIP &&素数表指针向下移动一个
ENDFOR
ENDIF
IF j2>SSS2-7
EXIT
ELSE
SELECT 三生合成结果&&打开盛放素数的表
APPEND BLANK &&增加一条空记录
REPLACE 模30的偶数 WITH X &&将N值付给素数
ENDIF
SKIP
ENDDO
ENDFOR
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
CLEAR ALL
这个程序没有完成任务,从显示情况看,没有调取完三生素数生成元中符合条件的值,只是用了第一个数47,不知是go 1的杰作,还是do while的杰作,还是最后的条件语句的杰作,不得而知。 |
|