数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: 白新岭

[原创]请教vfbpgyfk先生一个编程问题

  [复制链接]
发表于 2021-10-16 19:58 | 显示全部楼层
SELECT 1
USE D:\方程p减2的n次方\素数表万.DBF ALIAS 素数表万
SELECT 2
USE D:\方程p减2的n次方\一加m表.DBF ALIAS 一加m表
kssj=SECONDS()                      &&取出开始时间
FOR i=3 TO 33 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
FOR j=10 TO 6000 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
  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,"运行时间提示")
查找"1+m"中的反例程序,最终定稿。
回复 支持 反对

使用道具 举报

发表于 2021-10-16 21:32 | 显示全部楼层
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
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
  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,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-16 21:33 | 显示全部楼层
上楼是"1+m"问题,当m为偶数时,查找反例的程序。
回复 支持 反对

使用道具 举报

发表于 2021-10-17 09:51 | 显示全部楼层
秀才遇见兵,有理说不清。在“1+m”中,必须考虑合成数是否含m大于2的因子,否则输出结果不正确。
回复 支持 反对

使用道具 举报

发表于 2021-10-17 09:58 | 显示全部楼层
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
ss=43
ELSE
ss=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,ss)=0 AND ss>1
  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,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-17 10:14 | 显示全部楼层
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下边素数用着,出现了错误
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下边素数用着,出现了错误
  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,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-18 19:03 | 显示全部楼层
今天对不能合成偶数有个新算法,即以四生素数表为基数,然后逐步递增即可,以三角线法递增,即去掉一半的重复,例如(1+10)*10/2=55,而不是10*10=100,再就是,把第一次合成数储存,最后整理表,升序,即可。把空缺的揪出来即可。
回复 支持 反对

使用道具 举报

发表于 2021-10-18 20:13 | 显示全部楼层
SELECT 1
USE D:\三角递增法\四生素数表.DBF ALIAS 四素表
SELECT 2
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 102949
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    && jl=recno()
    PUBLIC A
    A=四素
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 四中 WITH A-4      &&将N值付给素数式
   SELECT 1
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-18 20:13 | 显示全部楼层
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\偶数表.DBF ALIAS 偶数表
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 2949
      @ 5,12 say i
    SELECT  1     
    jl=recno()
    PUBLIC A
    A=四中
          SELECT  1
          GO 1
          For j=1 to 102949
          @ 15,22 say j
          PUBLIC B
          B=四中
          C=A+B
           SELECT 2
           COUNT all  FOR C=偶数 TO tj
              IF tj=0
              SELECT 2
              APPEND BLANK   
              REPLACE 偶数 WITH C
              ENDIF   
           SELECT 1
           SKIP
           ENDFOR
   SELECT 1
   GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
    &&不成功案例,因为查找是否已有太费时间
回复 支持 反对

使用道具 举报

发表于 2021-10-18 21:35 | 显示全部楼层
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\偶数表.DBF ALIAS 偶数表
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 100
      @ 5,12 say i
    SELECT  1     
    jl=recno()
    PUBLIC A
    A=四中
          SELECT  1
          GO 1
          For j=1 to 102949
          @ 15,22 say j
          PUBLIC B
          B=四中
          C=A+B
              SELECT 2
              APPEND BLANK   
              REPLACE 偶数 WITH C   
           SELECT 1
           SKIP
           ENDFOR
   SELECT 1
   GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
直接制作偶数表
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-5-19 14:07 , Processed in 0.098710 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表