注册 登录
编程论坛 VFP论坛

优化程序或者从新编写求四生素数中项不能合成的偶数

独木星空 发布于 2021-10-17 19:31, 13652 次点击
* 以大定小选配素数对
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,"运行时间提示")
这是我编写的程序,下一贴把四生素数表(最末的一项代表值,即一组四生素数用最末的一个素数代替),发上来,还有存储表:不能被合成的偶数。
267 回复
#252
独木星空2022-12-04 21:03
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=28.964120370370400000
SELECT 1
  GO 7
  A=素数
  s=s*A*(A-9)/(A-1)/(A-8)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-9)/(B-1)/(B-8)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#253
独木星空2022-12-06 22:24
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=36.317460317460317460
SELECT 1
  GO 7
  A=素数
  s=s*A*(A-10)/(A-4)/(A-6)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-10)/(B-4)/(B-6)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
计算最密4生素数的中项,与最密6生素数的中项和,合成数的数量公式的公共系数。
#254
独木星空2022-12-08 19:23
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=9.023437500000000000
SELECT 1
  GO 6
  A=素数
  s=s*A*(A-10)/(A-3)/(A-7)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-10)/(B-3)/(B-7)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#255
独木星空2022-12-09 21:06
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=1.123456790123460000
SELECT 1
  GO 7
  A=素数
  s=s*A*(A-10)/(A-2)/(A-8)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-10)/(B-2)/(B-8)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#256
独木星空2022-12-12 16:45
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=26.067708333333333333
SELECT 1
  GO 7
  A=素数
  s=s*A*(A-10)/(A-5)/(A-5)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-10)/(B-5)/(B-5)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#257
独木星空2022-12-14 19:59
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=2.780555555555555555
SELECT 1
  GO 7
  A=素数
  s=s*A*(A-10)/(A-1)/(A-9)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-10)/(B-1)/(B-9)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
我只是在储备材料。
#258
独木星空2022-12-17 16:11
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差三生.DBF ALIAS 三生素数表
kssj=SECONDS()
 For i=1 to 50876000
      @ 5,12 say i
     SELECT 1
     PUBLIC A
     A=素数
     jl=recno() &&记录指针位置
   
     skip
     PUBLIC B
     B=素数
     
     skip
     PUBLIC C
     C=素数
    cj1=B-A
    cj2=C-B
    IF cj1=2 AND cj2=4
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 三生素 WITH C     
         REPLACE 记录3 WITH jl+2
    ENDIF
      
      SELECT 1
      GO jl+1
   
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
搜寻最密3生素数程序(从素数表中),为扩张x^2+x+P型的素数式链条。
#259
独木星空2022-12-17 17:04
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差三生.DBF ALIAS 等差三生
SELECT 3
USE d:\二次等差素数数列\二次等差四生.DBF ALIAS 等差四生
kssj=SECONDS()
 For i=1 to 379705
      @ 5,12 say i
     SELECT 2
     jl3=记录3
    SELECT  1
    GO jl3   
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 2
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=6
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 四生素 WITH A+6     
         REPLACE 记录4 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作二次等差4生素数
#260
独木星空2022-12-17 20:19
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差四生.DBF ALIAS 等差四生
SELECT 3
USE d:\二次等差素数数列\二次等差五生.DBF ALIAS 等差五生
kssj=SECONDS()
 For i=1 to 56763
      @ 5,12 say i
     SELECT 2
     jl4=记录4
    SELECT  1
    GO jl4  
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 3
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=8
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 五生素 WITH A+8   
         REPLACE 记录5 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作等差5生素数
#261
独木星空2022-12-17 20:30
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差五生.DBF ALIAS 等差五生
SELECT 3
USE d:\二次等差素数数列\二次等差六生.DBF ALIAS 等差六生
kssj=SECONDS()
 For i=1 to 10758
      @ 5,12 say i
     SELECT 2
     jl5=记录5
    SELECT  1
    GO jl5  
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 3
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=10
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 六生素 WITH A+10   
         REPLACE 记录6 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作等差6生素数
#262
独木星空2022-12-17 20:40
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差六生.DBF ALIAS 等差六生
SELECT 3
USE d:\二次等差素数数列\二次等差七生.DBF ALIAS 等差七生
kssj=SECONDS()
 For i=1 to 1905
      @ 5,12 say i
     SELECT 2
     jl6=记录6
    SELECT  1
    GO jl6  
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 4
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=12
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 七生素 WITH A+12   
         REPLACE 记录7 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作2次等差7生素数
#263
独木星空2022-12-17 20:48
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差七生.DBF ALIAS 等差七生
SELECT 3
USE d:\二次等差素数数列\二次等差八生.DBF ALIAS 等差八生
kssj=SECONDS()
 For i=1 to 403
      @ 5,12 say i
     SELECT 2
     jl7=记录7
    SELECT  1
    GO jl7
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 5
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=14
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 八生素 WITH A+14   
         REPLACE 记录8 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作2次等差素数数列,8生素数
#264
独木星空2022-12-17 21:00
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差八生.DBF ALIAS 等差八生
SELECT 3
USE d:\二次等差素数数列\二次等差九生.DBF ALIAS 等差九生
kssj=SECONDS()
 For i=1 to 99
      @ 5,12 say i
     SELECT 2
     jl8=记录8
    SELECT  1
    GO jl8
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 5
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=16
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 九生素 WITH A+16
         REPLACE 记录9 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作2次等差素数数列,9生素数
#265
独木星空2022-12-17 21:22
SELECT 1
USE d:\二次等差素数数列\素数表.DBF ALIAS 素数表
SELECT 2
USE d:\二次等差素数数列\二次等差九生.DBF ALIAS 等差九生
SELECT 3
USE d:\二次等差素数数列\二次等差十生.DBF ALIAS 等差十生
kssj=SECONDS()
 For i=1 to 23
      @ 5,12 say i
     SELECT 2
     jl9=记录9
    SELECT  1
    GO jl9
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 6
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=18
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 十生素 WITH A+18
         REPLACE 记录10 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#266
独木星空2022-12-19 19:36
SELECT 1
USE H:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=19.861111111111111111
SELECT 1
  GO 7
  A=素数
  s=s*A*(A-11)/(A-4)/(A-7)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-11)/(B-4)/(B-7)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#267
独木星空2022-12-25 16:20
SELECT 1
USE d:\二次等差素数数列\素数表.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
s=15.640625000000000000
SELECT 1
  GO 7
  A=素数
  s=s*A*(A-11)/(A-3)/(A-8)
  SKIP 1
        FOR  j=1 TO 50876310
        SELECT 1
        B=素数
        s=s*B*(B-11)/(B-3)/(B-8)
        SELECT 1  
        SKIP
        ENDFOR

?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是计算最密3生素数的中项,与最密8生素数的中项,和,合成数的数量公式中的公共系数(最小系数)。
#268
独木星空2023-03-09 21:00
SUM ALL 素数 TO qh for 素数<1000000
?qh
试着学习,sum的用法。
∑(素数)=37550402023   (小于100万之内的素数和)
123456