CLEAR
SELECT 1
USE D:\标记法\数据源表.DBF ALIAS 数据源
SELECT 2
USE D:\标记法\素数表5万.DBF ALIAS 素数表参
SELECT 3
USE D:\标记法\数据表a.DBF ALIAS 数据a
SELECT 4
USE D:\标记法\数据表b.DBF ALIAS 数据b
SELECT 5
USE D:\标记法\素数表结果.DBF ALIAS 素数表果
&& bcz=510510
kssj=SECONDS()
FOR i=1 TO 2
@12,10 SAY i
SELECT 3
DELETE ALL &&因为此表将写入新的数据,所以提前清空数据,即记录条值
PACK
SELECT 1
GO 1
FOR j=1 TO 1658880
sss=素数式
dclz=sss+(i-1)*9699690 &&dclz是待处理值
SELECT 3
APPEND BLANK
REPLACE 数据1 WITH dclz
SELECT 1
SKIP
ENDFOR
SELECT 3
GO 1658880
bpz=数据1
Kf=INT(SQRT(bpz))
GO 1
SELECT 2
GO 1
COUNT ALL FOR 素参<=kf TO jlh && jlh=RECNO()
xhcs=jlh-8 &&xhcs是循环次数的简写(第一个字母代替)
SELECT 2
GO 9
FOR k=1 TO xhcs
sc=素参
IF MOD(k,2)=1
SELECT 4
DELETE ALL
PACK
SELECT 3
jlts1=RECCOUNT() &&把数据a表中的记录条总数赋给变量:jlts1
GO 1
for h1=1 to jlts1
sj1=数据1
ys1=MOD(sj1,sc)
IF ys1=0
ELSE
SELECT 4
APPEND BLANK
REPLACE 数据2 WITH sj1
ENDIF
SELECT 3
SKIP
ENDFOR
ELSE
SELECT 3
DELETE ALL
PACK
SELECT 4
jlts2=RECCOUNT() &&把数据b表中的记录条总数赋给变量:jlts2
GO 1
for h2=1 to jlts2
sj2=数据2
ys2=MOD(sj2,sc)
IF ys2=0
ELSE
SELECT 3
APPEND BLANK
REPLACE 数据1 WITH sj2
ENDIF
SELECT 4
SKIP
ENDFOR
ENDIF
SELECT 2
skip
ENDFOR
IF MOD(xhcs,2)=1
SELECT 4
jlts3=RECCOUNT()
GO 1
for h3=1 to jlts3
sj3=数据2
SELECT 5
APPEND BLANK
REPLACE 素数 WITH sj3
SELECT 4
SKIP
ENDFOR
ELSE
SELECT 3
jlts4=RECCOUNT()
GO 1
for h4=1 to jlts4
sj4=数据1
SELECT 5
APPEND BLANK
REPLACE 素数 WITH sj4
SELECT 3
SKIP
ENDFOR
ENDIF
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是我编写的程序,能正常运行,两周的运算时间为:29分40.24秒,在素数表结果中存储了1234399个数据,第一个1不是素数,第二个素数从3119开始的,3119前有443个素数,由1234399-1+443=1234841个素数,与以前方法制作的素数表中2*9699690=19399380内的素数个数一致,说明算法正确。
还是不满意运行时间,仍就偏大,不知道以前的方法运行时间是多少了(有空运行后再比对)。
SELECT 1
USE D:\标记法\数据源表.DBF ALIAS 数据源
SELECT 2
USE D:\标记法\素数表5万.DBF ALIAS 素数表参
SELECT 3
USE D:\标记法\数据表a.DBF ALIAS 数据a
SELECT 4
USE D:\标记法\数据表b.DBF ALIAS 数据b
SELECT 5
USE D:\标记法\素数表结果.DBF ALIAS 素数表果
&& bcz=510510
kssj=SECONDS()
FOR i=1 TO 2
@12,10 SAY i
SELECT 3
DELETE ALL &&因为此表将写入新的数据,所以提前清空数据,即记录条值
PACK
SELECT 1
GO 1
FOR j=1 TO 1658880
sss=素数式
dclz=sss+(i-1)*9699690 &&dclz是待处理值
SELECT 3
APPEND BLANK
REPLACE 数据1 WITH dclz
SELECT 1
SKIP
ENDFOR
SELECT 3
GO 1658880
bpz=数据1
Kf=INT(SQRT(bpz))
GO 1
SELECT 2
GO 1
COUNT ALL FOR 素参<=kf TO jlh && jlh=RECNO()
xhcs=jlh-8 &&xhcs是循环次数的简写(第一个字母代替)
SELECT 2
GO 9
FOR k=1 TO xhcs
sc=素参
IF MOD(k,2)=1
SELECT 4
DELETE ALL
PACK
SELECT 3
jlts1=RECCOUNT() &&把数据a表中的记录条总数赋给变量:jlts1
GO 1
for h1=1 to jlts1
sj1=数据1
ys1=MOD(sj1,sc)
IF ys1=0
ELSE
SELECT 4
APPEND BLANK
REPLACE 数据2 WITH sj1
ENDIF
SELECT 3
SKIP
ENDFOR
ELSE
SELECT 3
DELETE ALL
PACK
SELECT 4
jlts2=RECCOUNT() &&把数据b表中的记录条总数赋给变量:jlts2
GO 1
for h2=1 to jlts2
sj2=数据2
ys2=MOD(sj2,sc)
IF ys2=0
ELSE
SELECT 3
APPEND BLANK
REPLACE 数据1 WITH sj2
ENDIF
SELECT 4
SKIP
ENDFOR
ENDIF
SELECT 2
skip
ENDFOR
IF MOD(xhcs,2)=1
SELECT 4
jlts3=RECCOUNT()
GO 1
for h3=1 to jlts3
sj3=数据2
SELECT 5
APPEND BLANK
REPLACE 素数 WITH sj3
SELECT 4
SKIP
ENDFOR
ELSE
SELECT 3
jlts4=RECCOUNT()
GO 1
for h4=1 to jlts4
sj4=数据1
SELECT 5
APPEND BLANK
REPLACE 素数 WITH sj4
SELECT 3
SKIP
ENDFOR
ENDIF
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是我编写的程序,能正常运行,两周的运算时间为:29分40.24秒,在素数表结果中存储了1234399个数据,第一个1不是素数,第二个素数从3119开始的,3119前有443个素数,由1234399-1+443=1234841个素数,与以前方法制作的素数表中2*9699690=19399380内的素数个数一致,说明算法正确。
还是不满意运行时间,仍就偏大,不知道以前的方法运行时间是多少了(有空运行后再比对)。
素数问题的解决是我学习编程永恒的动力。