|

楼主 |
发表于 2025-4-17 13:38
|
显示全部楼层
SELECT 1
USE D:\素数式系数\素数式23.DBF ALIAS 素数式23
SELECT 2
USE D:\素数式系数\素数表万.DBF ALIAS 素数表
SELECT 3
USE D:\素数式系数\素数式307.DBF ALIAS 素数式307
kssj=SECONDS() &&取出开始时间
FOR i=1 TO 1
SELECT 1
GO 1
FOR k=1 TO 1635877
@22,20 SAY k
ly23=sss23
&& bpz=ly23+(i-1)*223092870 &&给被判断值置数,以循环值做变量。
&& Kf=INT(SQRT(bpz)) &&求出被判断值的开方根
&& SELECT 2 &&打开素数表
&& LOCATE FOR 素数>=kf &&根据开方根,查找最大素数
&& DO CASE
&& CASE EOF() &&如果超出素数表最后一条记录
&& GO BOTTOM
&& CASE 素数>kf &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
&& SKIP -1
&& ENDCASE
&& SSS=RECNO() &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
SELECT 2
GO 10
&&从第二条记录开始读取素数(3)
FOR j=1 TO 55
ys=MOD(ly23,素数) &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
IF ys=0 && OR ys=4 OR ys=6 OR ys=10 OR ys=12 OR ys=16 OR ys=MOD(36,素数) OR ys=MOD(38,素数) OR ys=MOD(120,素数) OR ys=MOD(122,素数) OR ys=MOD(126,素数) OR ys=MOD(128,素数)
EXIT &&因为符合条件,则做完相应工作后跳出内循环
ENDIF
SKIP &&素数表指针向下移动一个
ENDFOR
IF j>54
SELECT 3 &&打开保存求解结果的信息表
APPEND BLANK &&增加一条空记录
REPLACE sss307 WITH ly23 &&将被判断值保存到被判断值字段中(被判断值数据栏)
ENDIF
SELECT 1
SKIP
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示") |
|