CLEAR
SELECT 1
USE D:\vfp温习\素数式至19表.DBF ALIAS 素数式表
SELECT 2
USE D:\vfp温习\素数表万3.DBF ALIAS 素数表万3
SELECT 3
USE D:\vfp温习\素数表实验.DBF ALIAS 素数表 &&当时仅改变了别名,没有改原名,在素数表亿新后增加了198-200周期素数,改正,并去掉了后续素数
*INPUT "请输入预先值 K= " TO yxk
*INPUT "请输入步长值 bcz= " TO bcz
*INPUT "请输入初始值 csz= " TO csz
*INPUT "请输入外循环起始值 xks= " TO xks
*INPUT "请输入外循环终结值 zds= " TO zds
bcz=9699690 &&从2乘到17,即素数17的素数阶乘
kssj=SECONDS() &&取出开始时间
FOR i=1 TO 2
@12,10 SAY i
&&调了下顺序,原来在FOR j=1 TO 92160 的下边,执行第一个外循环,提示已经到了表尾
FOR j=1 TO 1658880
@22,20 SAY j
SELECT 1
GO j
sss=素数式
bpz=sss+(i-1)*bcz &&计算被判断值
Kf=INT(SQRT(bpz)) &&求出被判断值的开方根
SELECT 2
GO 1
COUNT ALL FOR 素数<=kf TO jlh &&借用原来的记录号,实际上统计kf以前的素数个数
&& jlh=RECNO()
SELECT 2
GO 9 &&从第二条记录开始读取素数(3)
FOR k=1 TO jlh-8 &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
qmz=MOD(bpz,素数) &&以读取的素数为条件,对被判断值求模
IF qmz=0 && OR qmz=2 OR qmz=6 OR qmz=8 如果符合这四个约定条件之一,就进行相应工作.如果一个也没有符合条件的,直接使记录指针向下移动一个(SKIP)
EXIT &&因为符合条件,则做完相应工作后跳出内循环
ENDIF
SKIP &&素数表指针向下移动一个
ENDFOR
IF k>jlh-8
SELECT 3 &&打开保存求解结果的信息表
APPEND BLANK &&增加一条空记录
REPLACE 素数 WITH bpz && 把bpz赋给素数
ENDIF
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
一个一个的处理方法用时:65分41.26秒,明显比一个批次一个批次处理要慢的多。