数学中国

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

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

  [复制链接]
发表于 2021-6-14 20:13 | 显示全部楼层
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L6三生素数24不能合成偶数表.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L6三生素数24表新.DBF  ALIAS 三素数表
kssj=SECONDS()
FOR n=10  to 10000
@ 3,6 say n
   FOR M=28 TO 40 step 6
          X=M+n*30
          Y=X/2   &&求出偶数的中值
        SELECT 2
        LOCATE FOR 三中24>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE 三中24>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=三中24
                GO xjl
                xss=三中24
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                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
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是三生素数24中项不能合成偶数程序。
8是例外集
回复 支持 反对

使用道具 举报

发表于 2021-6-15 19:26 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿整理
SELECT 2
USE D:\VFP温习\L6三生素数42表新.DBF ALIAS 三生素数表
kssj=SECONDS()
For i=1 to 5875530
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    SKIP 1
    PUBLIC C
    C=素数
    cj1=B-A  &&求前后两个素数的差值
    cj2=C-B  &&求前后两个素数的差值
    IF cj1=4 AND cj2=2
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 三中42 WITH A+3          &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是筛选三生素数(P,P+4,P+6)的中项程序。
回复 支持 反对

使用道具 举报

发表于 2021-6-15 19:39 | 显示全部楼层
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L6三生素数42不能合成偶数表.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L6三生素数42表新.DBF  ALIAS 三素数表
kssj=SECONDS()
FOR n=10  to 10000
@ 3,6 say n
   FOR M=20 TO 32 step 6
          X=M+n*30
          Y=X/2   &&求出偶数的中值
        SELECT 2
        LOCATE FOR 三中42>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE 三中42>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=三中42
                GO xjl
                xss=三中42
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                IF xss<Y+2 OR dss>Y-2                             &&判断跳出语句如果放在后面,有时出现一个重复素数对
                          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-1 OR dss<=Y+1
        SELECT 素数对
                                APPEND BLANK
                                REPLACE 偶数 WITH X
        ENDIF
   ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是搜寻不能有三生素数(P,P+4,P+6)的中项和合成的偶数程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-16 10:01 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿
SELECT 2
USE D:\VFP温习\L30三生素数表.DBF ALIAS 三生中表
kssj=SECONDS()
SELECT  1     &&打开盛放素数式的表
For i=1 to 5000000
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
     count next 10 for 30=素数-A to js1
     GO jl
     count next 20 for 60=素数-A to js2
        IF js1+js2=2
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE d30中 WITH A+30  &&将N值付给素数式
         else
       ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是在10亿素数表中搜寻等差三生素数(P,P+30,P+60)程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-16 10:27 | 显示全部楼层
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L30三生素数中项不能合成偶数.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L30三生素数表.DBF  ALIAS 三素数表
kssj=SECONDS()
FOR n=10001 to 20000
@ 3,6 say n
          X=n*2
          Y=n  &&求出偶数的中值
        SELECT 2
        LOCATE FOR d30中>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE d30中>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=d30中
                GO xjl
                xss=d30中
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                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,"运行时间提示")
查找等差30的三生素数中项和不能合成偶数程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-16 16:33 | 显示全部楼层
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L6三生素数d6不能合成偶数表.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L6三生素数d6表.DBF  ALIAS 三素数表
SELECT 3
USE D:\vfp温习\d6三生素数合成参照表.DBF  ALIAS 参照表
kssj=SECONDS()
FOR n=10  to 10000
@ 3,6 say n
   SELECT 3
   GO 1
   FOR M=1 TO 3
     cs=参数
          X=cs+n*10
          Y=X/2   &&求出偶数的中值
        SELECT 2
        LOCATE FOR d6三中>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE d6三中>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=d6三中
                GO xjl
                xss=d6三中
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                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
        SELECT 3
        skip
   ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是搜寻不能有等差三生素数(P,P+6,P+12)的中项和合成的偶数程序,5类偶数,只有3类偶数可以被合成,偶数除5,余数为2或余数为3的两类偶数不能被合成,无论到多大范围,直到无穷大都不能被合成;能被合成的三类偶数,在小范围内存在有限个反例,这个程序就是为了寻找它们而设的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-18 06:07 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿
SELECT 2
USE D:\VFP温习\L210三生素数表.DBF ALIAS 三生中表
kssj=SECONDS()
SELECT  1     &&打开盛放素数式的表
For i=1 to 1300000
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
     count next 63 for 210=素数-A to js1
     GO jl
     count next 126 for 420=素数-A to js2
        IF js1+js2=2
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE d210中 WITH A+210  &&将N值付给素数式
         else
       ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是筛选等差三生素数d210的中项程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-18 06:19 | 显示全部楼层
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L210三生素数不能合成偶数表.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L210三生素数表.DBF  ALIAS 三素数表
kssj=SECONDS()
FOR n=1000 to 10000
@ 3,6 say n
          X=n*2
          Y=n  &&求出偶数的中值
        SELECT 2
        LOCATE FOR d210中>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE d210中>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=d210中
                GO xjl
                xss=d210中
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                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,"运行时间提示")
筛查等差三生素数d210的中项和不能合成的偶数程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-18 06:55 | 显示全部楼层
vfp编程伴随着k生素数的增长,它们相辅相成,相得益彰。互相促进,共同繁荣。同时俱进,再创辉煌。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-18 14:55 | 显示全部楼层
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L6二生素数不能合成偶数表.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L6二生素数表.DBF  ALIAS 二素数表
kssj=SECONDS()
FOR n=50 to 100000
@ 3,6 say n
          X=n*2
          Y=n  &&求出偶数的中值
        SELECT 2
        LOCATE FOR 二生6中>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE 二生6中>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=二生6中
                GO xjl
                xss=二生6中
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                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,"运行时间提示")
这是二生素数L6的中项和不能合成偶数的程序。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 08:44 , Processed in 0.087579 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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