|

楼主 |
发表于 2020-12-8 15:12
|
显示全部楼层
SELECT 1
USE D:\vfp新素数式\素数a不余4.dbf ALIAS 素数a &&比制作表的素数值小(即下表) 原表在条件为真时
SELECT 2
USE D:\vfp新素数式\素数a余4参考.dbf ALIAS 素数a余数 &&比上边已筛除的素数值要大 在条件为假时参考表
SELECT 3
USE D:\vfp新素数式\素数b不余4.dbf ALIAS 素数b &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同 在条件为真时制造表,即新表
SELECT 4
USE D:\vfp新素数式\素数b余4参考.dbf ALIAS 素数b余数 &&比上边已筛除的素数值要大 在条件为真时参考表
SELECT 5
USE D:\vfp新素数式\素数表.dbf ALIAS 素数表参 &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同
kssj=SECONDS() &&取出开始时间
SELECT 5
GO 13 &&从素数37开始
FOR n=1 TO 4
ss=素数
IF MOD(n,2)=1 &&条件为真时,由a表制作b表,a表用一个,b表用2个,a表,为1和2,1表为主;b表为3和4,3表为主表
SELECT 1
GO 1
FOR i=1 TO 10000 &&这个范围远远超过出现最后一个余数的记录条数
A=素a &&改成表1的字段名
jlz=RECNO() &&记住指针所在位置
SELECT 4
jlzs2=RECCOUNT() &&核对表2记录条总数
IF jlzs2=ss &&改成将要制作参考表的素数值,即表2中的素数值
exit
ENDIF
ys=MOD(A,ss) &&改成将要制作参考表的素数值,即表2中的素数值
SELECT 4
count all for ys=余数b to js &&改成将要制作参考表的字段名,即表2中的字段名
IF js=0
SELECT 4
APPEND BLANK
REPLACE 余数b WITH ys &&改成本次追加记录的字段名,即表2的字段名
REPLACE 记录值 WITH jlz
ENDIF
SELECT 1
skip
ENDFOR
SELECT 4
GO ss
DELETE NEXT 1
pack
SELECT 1
GO 1
&&jlzs1=RECCOUNT() 核对表2记录条总数
DO WHILE NOT EOF() && FOR i=1 TO jlzs1 &&循环次数改成,SELECT 1 的总记录条数
A=素a &&设成表1的字段名
ys=MOD(A,ss) &&对3表的素数求余数
SELECT 4
count all for ys=余数b to js
IF js=1
SELECT 3
APPEND BLANK
REPLACE 素b WITH A &&改成本次追加记录的字段
ENDIF
SELECT 1
skip
ENDDO
ELSE &&条件为假时,由b表制作a表,b表用一个,a表用2个 (a表,为1和2,1表为主;b表为3和4,3表为主表)
SELECT 3
GO 1
FOR i=1 TO 10000 &&这个范围远远超过出现最后一个余数的记录条数
A=素b &&改成表1的字段名
jlz=RECNO() &&记住指针所在位置
SELECT 2
jlzs2=RECCOUNT() &&核对表2记录条总数
IF jlzs2=ss &&改成将要制作参考表的素数值,即表2中的素数值
exit
ENDIF
ys=MOD(A,ss) &&改成将要制作参考表的素数值,即表2中的素数值
SELECT 2
count all for ys=余数a to js &&改成将要制作参考表的字段名,即表2中的字段名
IF js=0
SELECT 2
APPEND BLANK
REPLACE 余数a WITH ys &&改成本次追加记录的字段名,即表2的字段名
REPLACE 记录值 WITH jlz
ENDIF
SELECT 3
skip
ENDFOR
SELECT 2
GO ss
DELETE NEXT 1
pack
SELECT 3
GO 1
&&jlzs1=RECCOUNT() 核对表2记录条总数
DO WHILE NOT EOF() && FOR i=1 TO jlzs1 &&循环次数改成,SELECT 1 的总记录条数
A=素b &&设成表1的字段名
ys=MOD(A,ss) &&对3表的素数求余数
SELECT 2
count all for ys=余数a to js
IF js=1
SELECT 1
APPEND BLANK
REPLACE 素a WITH A &&改成本次追加记录的字段
ENDIF
SELECT 3
skip
ENDDO
ENDIF
SELECT 5 && 外循环是选择素数表
skip
endfor
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是一个解决最密素数式问题的一个高级程序,同过a表,b表的相互替换,获得最终结果。 |
|