数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-7-11 11:01 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生素数生成元.dbf ALIAS 四生成元
kssj=SECONDS()  &&取出开始时间
FOR  i=1 TO 7  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
        ssy=15+(i-1)*30
        ys=MOD(ssy,7)
        IF ys=MOD(-4,7) OR ys=MOD(-2,7) OR ys=MOD(2,7) OR ys=MOD(4,7)
        else
      SELECT 1
      APPEND BLANK     &&增加一条空记录
      REPLACE 四中 WITH ssy
      ENDIF   
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
四生素数生成元至7
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 12:06 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生成元至7.dbf ALIAS 四生成元7
SELECT 2
USE D:\素数式系数\四生成元至11.dbf ALIAS 四生成元11
kssj=SECONDS()  &&取出开始时间
FOR  i=1 TO 11  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
    SELECT 1
    GO 1
    FOR j=1 TO 3
        sz7=四中7
        ssy=sz7+(i-1)*210
        ys=MOD(ssy,11)
        IF ys=MOD(-4,11) OR ys=MOD(-2,11) OR ys=MOD(2,11) OR ys=MOD(4,11)
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE 四中11 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
四生成元由7到11
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 12:07 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生成元至11.dbf ALIAS 四生成元11
SELECT 2
USE D:\素数式系数\四生成元至13.dbf ALIAS 四生成元13
kssj=SECONDS()  &&取出开始时间
FOR  i=1 TO 13  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
    SELECT 1
    GO 1
    ss=13
    FOR j=1 TO 21
        sz11=四中11
        ssy=sz11+(i-1)*2310
        ys=MOD(ssy,ss)
        IF ys=MOD(-4,ss) OR ys=MOD(-2,ss) OR ys=MOD(2,ss) OR ys=MOD(4,ss)
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE 四中13 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
四生成元由11到13
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 12:08 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生成元至13.dbf ALIAS 四生成元13
SELECT 2
USE D:\素数式系数\四生成元至17.dbf ALIAS 四生成元17
kssj=SECONDS()  &&取出开始时间
FOR  i=1 TO 17  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
    SELECT 1
    GO 1
    ss=17
    FOR j=1 TO 189
        sz13=四中13
        ssy=sz13+(i-1)*30030
        ys=MOD(ssy,ss)
        IF ys=MOD(-4,ss) OR ys=MOD(-2,ss) OR ys=MOD(2,ss) OR ys=MOD(4,ss)
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE 四中17 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
四生成元由13到17
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 12:09 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生成元至17.dbf ALIAS 四生成元17
SELECT 2
USE D:\素数式系数\四生成元至19.dbf ALIAS 四生成元19
kssj=SECONDS()  &&取出开始时间
FOR  i=1 TO 19  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
    SELECT 1
    GO 1
    ss=19
    FOR j=1 TO 2457
        sz17=四中17
        ssy=sz17+(i-1)*510510
        ys=MOD(ssy,ss)
        IF ys=MOD(-4,ss) OR ys=MOD(-2,ss) OR ys=MOD(2,ss) OR ys=MOD(4,ss)
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE 四中19 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
四生成元由17到19
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 12:10 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生成元至19.dbf ALIAS 四生成元19
SELECT 2
USE D:\素数式系数\四生成元至23.dbf ALIAS 四生成元23
kssj=SECONDS()  &&取出开始时间
FOR  i=1 TO 23  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
    SELECT 1
    GO 1
    ss=23
    FOR j=1 TO 36855
        sz19=四中19
        ssy=sz19+(i-1)*9699690
        ys=MOD(ssy,ss)
        IF ys=MOD(-4,ss) OR ys=MOD(-2,ss) OR ys=MOD(2,ss) OR ys=MOD(4,ss)
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE 四中23 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
四生成元由19到23
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 14:53 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生成元至23.DBF ALIAS 四成元23
SELECT 2
USE D:\素数式系数\四生三连体.DBF ALIAS 四三连
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 700240
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=四中23
    SKIP 1
    PUBLIC B
    B=四中23
    SKIP 1
    PUBLIC C
    C=四中23
    cj1=B-A  &&求前后两个素数的差值
    cj2=C-A  &&求前后两个素数的差值
    IF cj1=90 AND cj2=120
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 四三末 WITH A+120          &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
在至素数23时,搜寻四生素数三连体生成元程序,共计有3120个。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-11 15:34 | 显示全部楼层
SELECT 1
USE D:\素数式系数\四生成元至29.DBF ALIAS 四成元29
SELECT 2
USE D:\素数式系数\四生三连体.DBF ALIAS 四三连
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 17506120
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=四中29
    SKIP 1
    PUBLIC B
    B=四中29
    SKIP 1
    PUBLIC C
    C=四中29
    cj1=B-A  &&求前后两个素数的差值
    cj2=C-A  &&求前后两个素数的差值
    IF cj1=90 AND cj2=120
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 四三末 WITH A+120          &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
在至素数29时,搜寻四生素数三连体生成元程序,共计有3120*18=56160个。因为在12个素数式中有一对同余,(mod(6,29)=mod(122,29)).
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-12 08:19 | 显示全部楼层
SELECT 1
USE D:\vfp温习\四生三连体生成元.DBF  ALIAS 四三参照表
SELECT 2
USE D:\vfp温习\素数表亿内.DBF ALIAS 素数表亿
SELECT 3
USE D:\vfp温习\四生素数三连体中项.DBF ALIAS 四生素数三连体
kssj=SECONDS()                      &&取出开始时间
    FOR i=101 TO 1000
     @22,20 SAY i
     SELECT 1
     GO 1
     FOR k=1 TO 3120
     ssm=四三末+4
     bpz=ssm+(i-1)*223092870 &&给被判断值置数,以循环值做变量。
     Kf=INT(SQRT(bpz))                   &&求出被判断值的开方根
        SELECT 2                     &&打开素数表
        LOCATE FOR 素数>=kf                 &&根据开方根,查找最大素数
        DO CASE
        CASE EOF()                          &&如果超出素数表最后一条记录
        GO BOTTOM
        CASE 素数>kf                        &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
        SKIP -1
        ENDCASE
        SSS=RECNO()                         &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
        GO 10  
                                 &&从第二条记录开始读取素数(3)
        FOR j=1 TO SSS-9
        ys=MOD(bpz,素数)                    &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
        IF ys=0 OR ys=2 OR ys=6 OR ys=8 OR ys=MOD(30,素数) OR ys=MOD(32,素数) OR ys=MOD(36,素数) OR ys=MOD(38,素数) OR ys=MOD(120,素数) OR ys=MOD(122,素数) OR ys=MOD(126,素数) OR ys=MOD(128,素数)
        EXIT                                &&因为符合条件,则做完相应工作后跳出内循环
        ENDIF
        SKIP                               &&素数表指针向下移动一个
        ENDFOR
        IF j>sss-9
        SELECT 3              &&打开保存求解结果的信息表
        APPEND BLANK                        &&增加一条空记录
        REPLACE 四3末 WITH bpz             &&将被判断值保存到被判断值字段中(被判断值数据栏)
        ENDIF
        SELECT 1
        SKIP
        ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这个程序是正确的。在223092870*1000之内没有找到四生素数三连体(0,90,30).
回复 支持 反对

使用道具 举报

发表于 2021-7-12 15:43 | 显示全部楼层
SELECT 1
USE D:\二生素数中项合成\素数3165万内.DBF ALIAS 素数表
SELECT 2
USE D:\二生素数中项合成\二生L4中项.DBF ALIAS 二生中项
kssj=SECONDS()
For i=1 to 78497
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    COUNT NEXT 3 FOR 素数-A=4 TO tj
    IF tj=1
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二4中 WITH A+2       &&将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)的中项程序。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 06:05 , Processed in 0.092299 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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