SELECT 1
USE D:\方程p减2的n次方\素数表.DBF ALIAS 素数表
SELECT 2
USE D:\方程p减2的n次方\奇素数表.DBF ALIAS 奇素数表
kssj=SECONDS()
&&取出开始时间
FOR i=99 TO 9999 STEP 2
@12,10 SAY i
zs=INT(LOG(i)/LOG(2))
FOR j=1 TO zs
@22,20 SAY j
bpz=i-2^j
&&计算被判断值
Kf=INT(SQRT(bpz))
&&求出被判断值的开方根
SELECT 1
&&打开素数表
LOCATE FOR 素数>=kf
&&根据开方根,查找最大素数
DO CASE
CASE EOF()
&&如果超出素数表最后一条记录
GO BOTTOM
CASE 素数>kf
&&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
SKIP -1
ENDCASE
jlh=RECNO()
SELECT 1 &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
GO 1
&&从第二条记录开始读取素数(3)
FOR k=1 TO jlh
&&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
qmz=MOD(bpz,素数)
&&以读取的素数为条件,对被判断值求模
IF qmz=0 && OR qmz=2 OR qmz=6 OR qmz=8
如果符合这四个约定条件之一,就进行相应工作.如果一个也没有符合条件的,直接使记录指针向下移动一个(SKIP)
EXIT
&&因为符合条件,则做完相应工作后跳出内循环
ENDIF
SKIP
&&素数表指针向下移动一个
ENDFOR
IF k>jlh
SELECT 2
&&打开保存求解结果的信息表
APPEND BLANK
&&增加一条空记录
REPLACE 奇数 WITH i && 把bpz赋给素数
REPLACE 参素 WITH bpz && 把bpz赋给素数
ENDIF
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是用vfp语言编写的制作能被表示的奇数。