SELECT 1
USE D:\方程p减2的n次方\素数表万.DBF ALIAS 素数表万
SELECT 2
USE D:\方程p减2的n次方\一加m表.DBF ALIAS 一加m表
kssj=SECONDS() &&取出开始时间
FOR i=70 TO 100 STEP 2
@12,10 SAY i
IF MOD(i,3)=0
s=3
ELSE
s=1
ENDIF
IF MOD(i,5)=0
w=5
ELSE
w=1
ENDIF
IF MOD(i,7)=0
q=7
ELSE
q=1
ENDIF
IF MOD(i,11)=0
yy=11
ELSE
yy=1
ENDIF
IF MOD(i,13)=0
ys=13
ELSE
ys=1
ENDIF
IF MOD(i,17)=0
yq=17
ELSE
yq=1
ENDIF
IF MOD(i,19)=0
yj=19
ELSE
yj=1
ENDIF
IF MOD(i,23)=0
es=23
ELSE
es=1
ENDIF
IF MOD(i,29)=0
ej=29
ELSE
ej=1
ENDIF
IF MOD(i,31)=0
sy=31
ELSE
sy=1
ENDIF
IF MOD(i,37)=0
sq=37
ELSE
sq=1
ENDIF
IF MOD(i,41)=0
ssy=41
ELSE
ssy=1
ENDIF
IF MOD(i,43)=0
sss=43 &&原设计为ss=43,因为主循环中,此变量已经付给素数=ss,造成多重编码变量,导致结果运行错误
ELSE
sss=1 &&同上解释
ENDIF
IF MOD(i,47)=0
ssq=47
ELSE
ssq=1
ENDIF
FOR j=9 TO 13999 STEP 2
@22,20 SAY j
IF MOD(j,i)=0
LOOP
ENDIF
IF MOD(j,s)=0 AND s>1
LOOP
ENDIF
IF MOD(j,w)=0 AND w>1
LOOP
ENDIF
IF MOD(j,q)=0 AND q>1
LOOP
ENDIF
IF MOD(j,yy)=0 AND yy>1
LOOP
ENDIF
IF MOD(j,ys)=0 AND ys>1
LOOP
ENDIF
IF MOD(j,yq)=0 AND yq>1
LOOP
ENDIF
IF MOD(j,yj)=0 AND yj>1
LOOP
ENDIF
IF MOD(j,es)=0 AND es>1
LOOP
ENDIF
IF MOD(j,ej)=0 AND ej>1
LOOP
ENDIF
IF MOD(j,sy)=0 AND sy>1
LOOP
ENDIF
IF MOD(j,sq)=0 AND sq>1
LOOP
ENDIF
IF MOD(j,ssy)=0 AND ssy>1
LOOP
ENDIF
IF MOD(j,sss)=0 AND sss>1 &&原设计为ss=43,因为主循环中,此变量已经付给素数=ss,造成多重编码变量,导致结果运行错误
LOOP
ENDIF
IF MOD(j,ssq)=0 AND ssq>1
LOOP
ENDIF
SELECT 1
GO 1
COUNT ALL FOR 素数<=j/i TO tj
SELECT 1
GO 1
FOR k=1 TO tj
SELECT 1
ss=素数
jl=recno()
pdz=j-i*ss
SELECT 1
GO 1
COUNT NEXT i*tj+10 FOR 素数=pdz TO tj1
IF tj1=1
EXIT
ENDIF
SELECT 1
GO jl+1
ENDFOR
IF k>tj
SELECT 2
APPEND BLANK
REPLACE m值 WITH i
REPLACE n值 WITH j
ENDIF
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
当m为偶数时,对于大于72的偶数,需用本程序才正确。大于100后仍就不正确。
对于43这个变量名称做了调整,因为与素数=ss相同。
USE D:\方程p减2的n次方\素数表万.DBF ALIAS 素数表万
SELECT 2
USE D:\方程p减2的n次方\一加m表.DBF ALIAS 一加m表
kssj=SECONDS() &&取出开始时间
FOR i=70 TO 100 STEP 2
@12,10 SAY i
IF MOD(i,3)=0
s=3
ELSE
s=1
ENDIF
IF MOD(i,5)=0
w=5
ELSE
w=1
ENDIF
IF MOD(i,7)=0
q=7
ELSE
q=1
ENDIF
IF MOD(i,11)=0
yy=11
ELSE
yy=1
ENDIF
IF MOD(i,13)=0
ys=13
ELSE
ys=1
ENDIF
IF MOD(i,17)=0
yq=17
ELSE
yq=1
ENDIF
IF MOD(i,19)=0
yj=19
ELSE
yj=1
ENDIF
IF MOD(i,23)=0
es=23
ELSE
es=1
ENDIF
IF MOD(i,29)=0
ej=29
ELSE
ej=1
ENDIF
IF MOD(i,31)=0
sy=31
ELSE
sy=1
ENDIF
IF MOD(i,37)=0
sq=37
ELSE
sq=1
ENDIF
IF MOD(i,41)=0
ssy=41
ELSE
ssy=1
ENDIF
IF MOD(i,43)=0
sss=43 &&原设计为ss=43,因为主循环中,此变量已经付给素数=ss,造成多重编码变量,导致结果运行错误
ELSE
sss=1 &&同上解释
ENDIF
IF MOD(i,47)=0
ssq=47
ELSE
ssq=1
ENDIF
FOR j=9 TO 13999 STEP 2
@22,20 SAY j
IF MOD(j,i)=0
LOOP
ENDIF
IF MOD(j,s)=0 AND s>1
LOOP
ENDIF
IF MOD(j,w)=0 AND w>1
LOOP
ENDIF
IF MOD(j,q)=0 AND q>1
LOOP
ENDIF
IF MOD(j,yy)=0 AND yy>1
LOOP
ENDIF
IF MOD(j,ys)=0 AND ys>1
LOOP
ENDIF
IF MOD(j,yq)=0 AND yq>1
LOOP
ENDIF
IF MOD(j,yj)=0 AND yj>1
LOOP
ENDIF
IF MOD(j,es)=0 AND es>1
LOOP
ENDIF
IF MOD(j,ej)=0 AND ej>1
LOOP
ENDIF
IF MOD(j,sy)=0 AND sy>1
LOOP
ENDIF
IF MOD(j,sq)=0 AND sq>1
LOOP
ENDIF
IF MOD(j,ssy)=0 AND ssy>1
LOOP
ENDIF
IF MOD(j,sss)=0 AND sss>1 &&原设计为ss=43,因为主循环中,此变量已经付给素数=ss,造成多重编码变量,导致结果运行错误
LOOP
ENDIF
IF MOD(j,ssq)=0 AND ssq>1
LOOP
ENDIF
SELECT 1
GO 1
COUNT ALL FOR 素数<=j/i TO tj
SELECT 1
GO 1
FOR k=1 TO tj
SELECT 1
ss=素数
jl=recno()
pdz=j-i*ss
SELECT 1
GO 1
COUNT NEXT i*tj+10 FOR 素数=pdz TO tj1
IF tj1=1
EXIT
ENDIF
SELECT 1
GO jl+1
ENDFOR
IF k>tj
SELECT 2
APPEND BLANK
REPLACE m值 WITH i
REPLACE n值 WITH j
ENDIF
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
当m为偶数时,对于大于72的偶数,需用本程序才正确。大于100后仍就不正确。
对于43这个变量名称做了调整,因为与素数=ss相同。
[此贴子已经被作者于2021-10-17 12:32编辑过]
素数问题的解决是我学习编程永恒的动力。