优化程序或者从新编写求四生素数中项不能合成的偶数
* 以大定小选配素数对LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L8四生素数尾素不能合成数.DBF ALIAS 素数对 &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L8四生素数真表.DBF ALIAS 素数表
kssj=SECONDS()
FOR i=23000001 to 24000000
@ 3,6 say i
n=i
X=8+(INT((n-INT((n-1)/5)*5)/2)+(n-INT((n-1)/5)*5))*30+INT((n-1)/5)*210 &&这是在给被判偶数置数,思路每5个偶数构成一个循环期,步长210。
Y=X/2 &&求出偶数的中值(上一条置数语句,除了外步长210,还有内步长30,但是有2个间断点,所以有些复杂。
SELECT 素数表
LOCATE FOR 四素>X
DO CASE
CASE EOF()
GO Bottom
CASE 四素>X
SKIP -1
ENDCASE
xjl=1
djl=RECNO()
t=.T.
DO WHILE t
dss=四素
GO xjl
xss=四素
&&放在这里比较合适,这里原来显示小素数的值,去掉了。
IF xss<Y+1 OR dss>Y-1 &&判断跳出语句如果放在后面,有时出现一个重复素数对
t=.T.
ELSE
t=.F. &&跳出命令
ENDIF &&结束判断
DO CASE
CASE xss+dss>X
GO djl
SKIP -1
djl=RECNO()
CASE xss+dss=X
EXIT
CASE xss+dss<X
GO xjl
SKIP
xjl=RECNO()
GO djl
ENDCASE
ENDDO
IF xss>Y OR dss<Y
SELECT 素数对
APPEND BLANK
REPLACE 偶数 WITH X
ENDIF
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是我编写的程序,下一贴把四生素数表(最末的一项代表值,即一组四生素数用最末的一个素数代替),发上来,还有存储表:不能被合成的偶数。