|

楼主 |
发表于 2021-7-10 21:25
|
显示全部楼层
SELECT 1
USE D:\vfp温习\四生素数三连体参照表.DBF ALIAS 四三参照表
SELECT 2
USE D:\vfp温习\素数表亿内.DBF ALIAS 素数表亿
SELECT 3
USE D:\vfp温习\四生素数三连体中项.DBF ALIAS 四生素数三连体
kssj=SECONDS() &&取出开始时间
FOR i=1 TO 33300
@22,20 SAY i
SELECT 1
GO 1
FOR k=1 TO 4
ssc=四三参
bpz=ssc+(i-1)*30030&&给被判断值置数,以循环值做变量。
Kf=INT(SQRT(bpz)) &&求出被判断值的开方根
SELECT 2 &&打开素数表
LOCATE FOR 素数>=kf &&根据开方根,查找最大素数
DO CASE
CASE EOF() &&如果超出素数表最后一条记录
GO BOTTOM
CASE 素数>kf &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
SKIP -1
ENDCASE
SSS=RECNO() &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
GO 7
ss=素数 &&从第二条记录开始读取素数(3)
FOR j=1 TO SSS-6
ys=MOD(bpz,ss) &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
IF ys=0 OR ys=MOD(2,ss) OR ys=MOD(6,ss) OR ys=MOD(8,ss) OR ys=MOD(90,ss) OR ys=MOD(92,ss) OR ys=MOD(96,ss) OR ys=MOD(98,ss) OR ys=MOD(120,ss) OR ys=MOD(122,ss) OR ys=MOD(126,ss) OR ys=MOD(128,ss)
EXIT &&因为符合条件,则做完相应工作后跳出内循环
ENDIF
SELECT 2
SKIP &&素数表指针向下移动一个
ENDFOR
IF j>sss-6
SELECT 3 &&打开保存求解结果的信息表
APPEND BLANK &&增加一条空记录
REPLACE 四3末 WITH bpz &&将被判断值保存到被判断值字段中(被判断值数据栏)
ENDIF
SELECT 1
SKIP
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
筛选四生素数三连体。(0,30,90)邻距表示法。 |
|