注册 登录
编程论坛 VFP论坛

简单的筛选二生素数程序

独木星空 发布于 2025-03-18 08:13, 2187 次点击
SELECT 1
USE D:\素数式系数\素数表十亿.DBF ALIAS 素数表
SELECT 2
USE D:\素数式系数\二生素数jg20.DBF ALIAS 二生素数表
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 50847534
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    cj1=B-A  &&求前后两个素数的差值
    IF cj1=20
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE ers20 WITH A+10   &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
199 回复
#52
独木星空2025-04-20 09:00
SELECT 1
USE D:\素数式系数\素数式23.DBF  ALIAS 素数式23
SELECT 2
USE D:\素数式系数\素数表万.DBF ALIAS 素数表
SELECT 3
USE D:\素数式系数\素数式47.DBF ALIAS 素数式47
kssj=SECONDS()                      &&取出开始时间
    FOR i=1 TO 1
   
     SELECT 1
     GO 1
     FOR k=1 TO 1635877
      @22,20 SAY k
     ly23=sss23
     && bpz=ly23+(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()                         &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
        SELECT 2
        GO 10  
                                 &&从第二条记录开始读取素数(3)
        FOR j=1 TO 6
        ys=MOD(ly23,素数)                    &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
        IF ys=0 && OR ys=4 OR ys=6 OR ys=10 OR ys=12 OR ys=16  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>5
        SELECT 3              &&打开保存求解结果的信息表
        APPEND BLANK                        &&增加一条空记录
        REPLACE sss47 WITH ly23            &&将被判断值保存到被判断值字段中(被判断值数据栏)
        ENDIF
        SELECT 1
        SKIP
        ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
之前筛选到307已经过度了,这次筛选到47为止。
#53
独木星空2025-04-20 10:36
SELECT 1
USE D:\素数式系数\素数式47.DBF ALIAS 素数式
SELECT 2
USE D:\素数式系数\最密k生素数间距短.DBF ALIAS 间距
kssj=SECONDS()
FOR h=1 TO 50
    @ 5,12 say h
    k=h+1
    SELECT  1
    GO 1
    E=1000
      For i=1 to 1417020
     
      SELECT  1     &&打开盛放素数式的表
      jl=recno()
   
      PUBLIC A
      A=sss47
      SKIP h
      PUBLIC B
      B=sss47
      cj1=B-A  &&求前后两个素数的差值
      IF E>cj1
      E=cj1
      ELSE E<=cj1
   
      E=E
         
      ENDIF
      SELECT 1
      GO jl+1
      ENDFOR
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE ksssd WITH k &&将k值付给ksss
      REPLACE jjd WITH E
      
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#54
独木星空2025-04-20 20:12
SELECT 1
USE D:\素数式系数\素数式23.DBF ALIAS 素数式
SELECT 2
USE D:\素数式系数\最密k生素数间距23.DBF ALIAS 间距
kssj=SECONDS()
FOR h=24 TO 25
    @ 5,12 say h
    k=h+1
    SELECT  1
    GO 1
    E=1000
      For i=1 to 36495250
     
      SELECT  1     &&打开盛放素数式的表
      jl=recno()
   
      PUBLIC A
      A=sss23
      SKIP h
      PUBLIC B
      B=sss23
      cj1=B-A  &&求前后两个素数的差值
      IF E>cj1
      E=cj1
      ELSE E<=cj1
   
      E=E
         
      ENDIF
      SELECT 1
      GO jl+1
      ENDFOR
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE ksss23  WITH k &&将k值付给ksss
      REPLACE jj23  WITH E
      
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#55
独木星空2025-04-26 17:22
SELECT 1
     USE D:\制作最密素数式\素数式13.DBF ALIAS 素数式
     SELECT 2
     USE D:\制作最密素数式\素数式间距.DBF ALIAS 素数式间距
     SELECT 3
     USE D:\制作最密素数式\k生素数式.DBF ALIAS k生素数式
     kssj=SECONDS()
     FOR j=30 TO 68
        @ 5,12 say j
         k=j+1
         SELECT 2
         GO k-1
         PUBLIC ss
         ss=生数
         PUBLIC kj
         kj=跨距
           SELECT  1
           GO 1
           For i=1 to 5760
           SELECT  1     
           jl=recno()
           PUBLIC A
           A=ssss13
           SKIP k-1
           PUBLIC B
           B=ssss13
           cj1=B-A  &&求间隔一定素数式个数的差值
              IF cj1=kj
              SELECT 3
              APPEND BLANK     &&增加一条空记录
              REPLACE k生  WITH   k    &&赋值语句
              REPLACE 位置 WITH   jl   &&赋值语句
                  FOR n=1 TO k
                   cc="sss"+transform(n)
                   SELECT 1
                   GO jl
                   C=ssss13
                   SELECT 3
                   REPLACE &cc. WITH  C
                   SELECT 1
                   GO jl+1
                  ENDFOR
              ENDIF
         SELECT 1
         GO jl+1
         ENDFOR
         
       ENDFOR
       =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
所得结果不是自己预期的样子。
问题的关键应该是吧select 1
go jl 语句放在了最内层循环里面了,应该放在外面。
#56
独木星空2025-04-26 17:37
SELECT 1
     USE D:\制作最密素数式\素数式13.DBF ALIAS 素数式
     SELECT 2
     USE D:\制作最密素数式\素数式间距.DBF ALIAS 素数式间距
     SELECT 3
     USE D:\制作最密素数式\k生素数式.DBF ALIAS k生素数式
     kssj=SECONDS()
     FOR j=30 TO 68
        @ 5,12 say j
         k=j+1
         SELECT 2
         GO k-1
         PUBLIC ss
         ss=生数
         PUBLIC kj
         kj=跨距
           SELECT  1
           GO 1
           For i=1 to 5760
           SELECT  1     
           jl=recno()
           PUBLIC A
           A=ssss13
           SKIP k-1
           PUBLIC B
           B=ssss13
           cj1=B-A  &&求间隔一定素数式个数的差值
              IF cj1=kj
              SELECT 3
              APPEND BLANK     &&增加一条空记录
              REPLACE k生  WITH   k    &&赋值语句
              REPLACE 位置 WITH   jl   &&赋值语句
                   SELECT 1
                   GO jl
                   FOR n=1 TO k
                   cc="sss"+transform(n)
                   C=ssss13
                   SELECT 3
                   REPLACE &cc. WITH  C
                   SELECT 1
                   GO jl+1
                   ENDFOR
              ENDIF
         SELECT 1
         GO jl+1
         ENDFOR
         
       ENDFOR
       =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
仍就没有获得想要的结果,那个GO jl+1还是不行,没有变化。
#57
独木星空2025-04-26 17:40
SELECT 1
     USE D:\制作最密素数式\素数式13.DBF ALIAS 素数式
     SELECT 2
     USE D:\制作最密素数式\素数式间距.DBF ALIAS 素数式间距
     SELECT 3
     USE D:\制作最密素数式\k生素数式.DBF ALIAS k生素数式
     kssj=SECONDS()
     FOR j=30 TO 68
        @ 5,12 say j
         k=j+1
         SELECT 2
         GO k-1
         PUBLIC ss
         ss=生数
         PUBLIC kj
         kj=跨距
           SELECT  1
           GO 1
           For i=1 to 5760
           SELECT  1     
           jl=recno()
           PUBLIC A
           A=ssss13
           SKIP k-1
           PUBLIC B
           B=ssss13
           cj1=B-A  &&求间隔一定素数式个数的差值
              IF cj1=kj
              SELECT 3
              APPEND BLANK     &&增加一条空记录
              REPLACE k生  WITH   k    &&赋值语句
              REPLACE 位置 WITH   jl   &&赋值语句
                   SELECT 1
                   GO jl
                   FOR n=1 TO k
                   cc="sss"+transform(n)
                   C=ssss13
                   SELECT 3
                   REPLACE &cc. WITH  C
                   SELECT 1
                   GO jl+n
                   ENDFOR
              ENDIF
         SELECT 1
         GO jl+1
         ENDFOR
         
       ENDFOR
       =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
获得满意结果,是自己预想的样子
#58
独木星空2025-04-27 21:01
只有对问题有深刻的了解,才能运用vfp编程获得自己想要的结果。从Excel翻译成vfp程序。
#59
独木星空2025-04-28 23:56
SELECT 1
USE D:\素数式系数\素数式23.DBF ALIAS 素数式
SELECT 2
USE D:\素数式系数\最密k生素数间距23.DBF ALIAS 间距
kssj=SECONDS()
FOR h=85 TO 87
    @ 5,12 say h
    k=h+1
    SELECT  1
    GO 1
    E=1000
      For i=1 to 36495250
     
      SELECT  1     &&打开盛放素数式的表
      jl=recno()
   
      PUBLIC A
      A=sss23
      SKIP h
      PUBLIC B
      B=sss23
      cj1=B-A  &&求前后两个素数的差值
      IF E>cj1
      E=cj1
      ELSE E<=cj1
   
      E=E
         
      ENDIF
      SELECT 1
      GO jl+1
      ENDFOR
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE ksss23  WITH k &&将k值付给ksss
      REPLACE jj23  WITH E
      
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#60
hsfisher2025-05-14 09:23
学习学习
#61
独木星空2025-05-19 22:09
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
    ss=11
    FOR j=1 TO 48
        sz7=Ss7
        ssy=sz7+(i-1)*210
        ys=MOD(ssy,ss)
        IF ys=0
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE Ss11 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
 ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#62
独木星空2025-05-19 22:09
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 480
        sz11=Ss11
        ssy=sz11+(i-1)*2310
        ys=MOD(ssy,ss)
        IF ys=0
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE Ss13 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
 ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#63
独木星空2025-05-19 22:18
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 5760
        sz13=Ss13
        ssy=sz13+(i-1)*30030
        ys=MOD(ssy,ss)
        IF ys=0
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE Ss17 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
 ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#64
独木星空2025-05-19 22:21
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 92160
        sz17=Ss17
        ssy=sz17+(i-1)*510510
        ys=MOD(ssy,ss)
        IF ys=0
        else
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE Ss19 WITH ssy
      ENDIF  
      SELECT 1
      SKIP
    ENDFOR
 ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#65
独木星空2025-05-20 08:30
SELECT 1
USE D:\素数式新\素数式19.DBF ALIAS 素数式
SELECT 2
USE D:\素数式新\最密k生素数间距19.DBF ALIAS 间距
kssj=SECONDS()
FOR h=10 TO 15
    @ 5,12 say h
    k=h+1
    SELECT  1
    GO 1
    E=1000
      For i=1 to 1658760
     
      SELECT  1     &&打开盛放素数式的表
      jl=recno()
   
      PUBLIC A
      A=ss19
      SKIP h
      PUBLIC B
      B=ss19
      cj1=B-A  &&求前后两个素数的差值
      IF E>cj1
      E=cj1
      ELSE E<=cj1
   
      E=E
         
      ENDIF
      SELECT 1
      GO jl+1
      ENDFOR
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE ksss19  WITH k &&将k值付给ksss
      REPLACE jj19  WITH E
      
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#66
独木星空2025-05-24 10:26
SELECT 1
USE d:\三生素数中项\三中和统计表.DBF ALIAS 三中和统计
kssj=SECONDS()
FOR i=1 TO 999999
   @ 3,6 say i
      FOR j=1  TO 3
         m=30*i+(j-1)*6-2
         SELECT  1  
         APPEND BLANK   
         REPLACE szhh WITH m
         REPLACE tj2 WITH 0
     ENDFOR
ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
给三中和置数(即把最密三中项的和(两个三中项相加得到的结果,预先放置在一个表上))
#67
独木星空2025-05-24 16:58
SELECT 1
 USE d:\三生素数中项\正最密三生素数中项.DBF ALIAS 正三中项
 SELECT 2
 USE d:\三生素数中项\三中和统计表.DBF ALIAS 三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 1 &&定位在第一个参与运算值上
 FOR i=1 TO 258
   @ 3,6 say i
   jl=recno()
   PUBLIC A
   A=三中
      SELECT 1
      GO 1
      FOR j=1  TO 8542
      PUBLIC B
      B=三中
      n=A+B
      SELECT  2
      GO   3*INT((n+2)/30-1)+MOD(n+2,30)/6+1
      REPLACE tj2 WITH tj2+1
      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,"运行时间提示")
这是把最密3生素数中项的和分配到其合成值上的vfp程序。
#68
独木星空2025-05-25 07:26
SELECT 1
 USE d:\三生素数中项\正最密三生素数中项.DBF ALIAS 正三中项
 SELECT 2
 USE d:\三生素数中项\三中和统计表.DBF ALIAS 三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 8543 &&定位在第一个参与运算值上
 FOR i=1 TO 3241
   @ 3,6 say i
   jl=recno()
   PUBLIC A
   A=三中
      SELECT 1
      GO 8543
      FOR j=1  TO 3241
      PUBLIC B
      B=三中
      n=A+B
      SELECT  2
      GO   3*INT((n+2)/30-1)+MOD(n+2,30)/6+1
      REPLACE tj2 WITH tj2+1
      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,"运行时间提示")
分配三生素数中项之和从1千万到1.5千万之间两项之和(指(a+b)^2=a^2+2ab+b^2中的b^2部分,无交叉项,交叉项另外计算分配)
#69
独木星空2025-05-25 08:45
SELECT 1
 USE d:\三生素数中项\正最密三生素数中项.DBF ALIAS 正三中项
 SELECT 2
 USE d:\三生素数中项\三中和统计表.DBF ALIAS 三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
 FOR i=1 TO 8542
   @ 3,6 say i
   jl=recno()
   PUBLIC A
   A=三中
      SELECT 1
      GO 8543
      FOR j=1  TO 3241
      PUBLIC B
      B=三中
      n=A+B
      SELECT  2
      GO   3*INT((n+2)/30-1)+MOD(n+2,30)/6+1
      REPLACE tj2 WITH tj2+2
      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,"运行时间提示")
#70
独木星空2025-05-25 13:07
SELECT 1
USE D:\素数式系数\三生素数jg6.DBF ALIAS 三素jg6表
SELECT 2
USE D:\素数式系数\逆三生素数中项.DBF ALIAS 逆三生素数中项表
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 111156
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=sss6
   
    IF MOD(A,3)=1
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE nsz WITH A    &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#71
独木星空2025-05-25 15:35
SELECT 1
 USE d:\三生素数中项\逆最密三生素数中项.DBF ALIAS 逆正三中项
 SELECT 2
 USE d:\三生素数中项\逆三中和统计表.DBF ALIAS 逆三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 121 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
 FOR i=1 TO 11881
   @ 3,6 say i
   jl=recno()
   PUBLIC A
   A=nsz
      SELECT 1
      GO 1
      FOR j=1  TO 12001
      PUBLIC B
      B=nsz
      n=A+B
      SELECT  2
      GO   3*INT((n+10)/30-1)+MOD(n+10,30)/6+1
      REPLACE tj2 WITH tj2+1
      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,"运行时间提示")
#72
独木星空2025-05-26 22:13
SELECT 1
USE D:\素数式系数\素数表十亿.DBF ALIAS 素数表
SELECT 2
USE D:\素数式系数\等差3生素数公差六.DBF ALIAS 等差3生六
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 5761455
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 2
    PUBLIC B
    B=素数
    SKIP 2
    PUBLIC C
    C=素数
    cj1=B-A  &&求两个素数的差值
    cj2=C-B  &&求两个素数的差值
    IF cj1=6 AND cj2=6  &&and同时满足条件
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE dcsz WITH B         &&将A+C的均值(即B)赋给dcsz(等差三中项)
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
从素数表中筛选等差3生素数公差六,素数之间都各有一个素数(1383个,一类697个,另一类686个)
#73
独木星空2025-05-26 22:16
SELECT 1
USE D:\素数式系数\素数表十亿.DBF ALIAS 素数表
SELECT 2
USE D:\素数式系数\等差3生素数公差六.DBF ALIAS 等差3生六
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 5761455
      @ 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=6 AND cj2=6  &&and同时满足条件
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE dcsz WITH B         &&将A+C的均值(即B)赋给dcsz(等差三中项)
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
中间无素数
#74
独木星空2025-05-26 23:33
SELECT 1
USE D:\素数式系数\素数表十亿.DBF ALIAS 素数表
SELECT 2
USE D:\素数式系数\等差3生素数公差六.DBF ALIAS 等差3生六
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 5761455
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 2 &&素数A与B之间间隔1个素数
    PUBLIC B
    B=素数
    SKIP 1
    PUBLIC C
    C=素数
    cj1=B-A  &&求两个素数的差值
    cj2=C-B  &&求两个素数的差值
    IF cj1=6 AND cj2=6  &&and同时满足条件
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE dcsz WITH B         &&将A+C的均值(即B)赋给dcsz(等差三中项)
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#75
独木星空2025-05-27 00:23
SELECT 1
USE D:\素数式系数\素数表十亿.DBF ALIAS 素数表
SELECT 2
USE D:\素数式系数\等差3生素数公差六.DBF ALIAS 等差3生六
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 5761455
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    SKIP 2 &&素数C与B之间间隔1个素数
    PUBLIC C
    C=素数
    cj1=B-A  &&求两个素数的差值
    cj2=C-B  &&求两个素数的差值
    IF cj1=6 AND cj2=6  &&and同时满足条件
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE dcsz WITH B         &&将A+C的均值(即B)赋给dcsz(等差三中项)
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#76
独木星空2025-05-27 08:13
USE
MODIFY PROJECT d:\素数式系数\素数式系数项目.pjx
USE 等差3生素数公差六 AGAIN IN 0
SELECT 等差3生素数公差六
BROWSE LAST
COPY TO d:\三生素数中项\等差三中d六.dbf
USE
MODIFY PROJECT d:\三生素数中项\三生素数项目.pjx
ADD TABLE d:\三生素数中项\等差三中d六.dbf
USE 等差三中d六 AGAIN IN 0
SELECT 等差三中d六
BROWSE LAST
SORT ON dcsz ASCENDING
SELECT * FROM 等差三中d六 ORDER BY dcsz INTO CURSOR 等差三中升
BROWSE LAST
COPY TO d:\三生素数中项\等差3中升序.dbf
USE
ADD TABLE d:\三生素数中项\等差3中升序.dbf
USE 等差3中升序 AGAIN IN 0
SELECT 等差3中升序
BROWSE LAST
COUNT ALL for
COUNT ALL FOR dcsz<10^7 TO tj
?tj
GO 17194
USE
#77
独木星空2025-05-27 11:59
SELECT 1
USE d:\三生素数中项\等差3中元素.DBF ALIAS 等差元素
SELECT 2
USE d:\三生素数中项\等差三中和统计表.DBF ALIAS 等差三中和统计
kssj=SECONDS()
FOR i=1 TO 100
   @ 3,6 say i
      SELECT 1
      GO 1
      FOR j=1  TO  9
        SELECT 1
        PUBLIC a
         a=dcys
         m=30*(i-1)+a
         SELECT  2
         APPEND BLANK   
         REPLACE dcszh WITH m
         REPLACE tj2 WITH 0
         SELECT 1
         skip
     ENDFOR
ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
给等差三中和统计表置数
#78
独木星空2025-05-27 15:55
SELECT 1
 USE d:\三生素数中项\等差3中升序.DBF ALIAS 等差3中表
 SELECT 2
 USE d:\三生素数中项\等差三中和统计表.DBF ALIAS 等差三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
 FOR i=1 TO 100
   @ 3,6 say i
   jl=recno()
   PUBLIC A
   A=dcsz
      SELECT 1
      GO 1
      FOR j=1  TO 9888
      PUBLIC B
      B=dcsz
      n=A+B
      c=n-INT((n-1)/30)*30
      d=INT((n-1)/30)*9
      IF c<21
      SELECT  2
      GO   INT(c/3)+d
      REPLACE tj2 WITH tj2+1
      ELSE
      SELECT  2
      GO 3+INT((c-10)/3)+d
      REPLACE tj2 WITH tj2+1
      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,"运行时间提示")
分配等差3生素数中项和结果
#79
独木星空2025-05-27 15:58
SELECT 1
 USE d:\三生素数中项\等差3中升序.DBF ALIAS 等差3中表
 SELECT 2
 USE d:\三生素数中项\等差三中和统计表.DBF ALIAS 等差三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 101 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
 FOR i=1 TO 9788
   @ 3,6 say i
   jl=recno()
   PUBLIC A
   A=dcsz
      SELECT 1
      GO 1
      FOR j=1  TO 9888
      PUBLIC B
      B=dcsz
      n=A+B
      c=n-INT((n-1)/30)*30
      d=INT((n-1)/30)*9
      IF c<21
      SELECT  2
      GO   INT(c/3)+d
      REPLACE tj2 WITH tj2+1
      ELSE
      SELECT  2
      GO 3+INT((c-10)/3)+d
      REPLACE tj2 WITH tj2+1
      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,"运行时间提示")
#80
独木星空2025-05-28 08:51
如何用vfp程序筛选出满足条件的记录条
网上搜索,AI给出的答案
在VFP中筛选满足条件的记录条,可以通过使用SQL命令、使用查询设计器、利用条件筛选命令等多种方法实现。
使用SQL命令
使用SQL命令是VFP中最常见且强大的一种数据筛选方法。SQL命令具有灵活性强、功能丰富等特点,可以实现复杂的数据筛选和操作1:

SELECT命令:SELECT命令是SQL中最基础的查询命令,用于从数据库中选取记录。例如,这条命令将从Customers表中选取所有Country字段值为USA的记录:SELECT * FROM Customers WHERE Country = 'USA'。
使用JOIN进行复杂查询:在实际应用中,经常需要从多个表中筛选数据。这时候可以用到JOIN操作符。例如,这条命令将选取所有来自USA的客户的订单信息:SELECT Orders.* FROM Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID WHERE Customers.Country = 'USA'。
使用查询设计器
查询设计器是VFP提供的一个可视化工具,允许用户通过拖拽和点击来设计查询。查询设计器适合不熟悉SQL语法的用户,它提供了一个直观的界面1:

创建基本查询:要创建一个基本查询,只需打开查询设计器,选择要查询的表,然后将需要的字段拖到查询窗口中。接着,可以在条件区域输入筛选条件,例如Country=‘USA’。
复杂查询设计:如果需要进行复杂查询,例如多表关联查询,可以在设计器中加入多个表,并通过拖拽表之间的关系线来定义表之间的关系。
#81
独木星空2025-05-28 09:05
SELECT 等差3中升序
BROWSE LAST
COUNT ALL FOR dcsz<5000000 TO tj
?tj
GO 9888
USE
USE 等差三中和统计表 AGAIN IN 0
SELECT 等差三中和统计表
BROWSE LAST
COUNT ALL FOR dcszh<5000000 TO tj
GO 1499900
USE
USE 等差三中和统计表 AGAIN IN 0
SELECT 等差三中和统计表
BROWSE LAST
SELECT * FROM 等差三中和统计表 WHERE tj2=0
COUNT ALL FOR dcszh<7000000 TO tj
?tj
GO 13119
COUNT ALL FOR dcszh 5000000 TO tj
COUNT ALL FOR dcszh<5000000 TO tj
?tj
GO 11859
GO 1
COPY TO d:\三生素数中项\等差3生素数中项五百万前无合成数.xls NEXT 11859 TYPE XL5
USE
USE 等差3中升序 AGAIN IN 0
SELECT 等差3中升序
BROWSE LAST
COUNT ALL FOR dcsz<10000000 TO tj
?tj
GO 17194
USE
USE 等差三中和统计表 AGAIN IN 0
SELECT 等差三中和统计表
BROWSE LAST
GO bottom
USE
#82
独木星空2025-05-28 09:11
SELECT 1
 USE d:\三生素数中项\等差3中升序.DBF ALIAS 等差3中表
 SELECT 2
 USE d:\三生素数中项\等差三中和统计表.DBF ALIAS 等差三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 9889 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
 FOR i=1 TO 7306
   @ 3,6 say i
   jl=recno()
   PUBLIC A
   A=dcsz
      SELECT 1
      GO 9889
      FOR j=1  TO 7306
      PUBLIC B
      B=dcsz
      n=A+B
      c=n-INT((n-1)/30)*30
      d=INT((n-1)/30)*9
      IF c<21
      SELECT  2
      GO   INT(c/3)+d
      REPLACE tj2 WITH tj2+1
      ELSE
      SELECT  2
      GO 3+INT((c-10)/3)+d
      REPLACE tj2 WITH tj2+1
      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,"运行时间提示")
#83
独木星空2025-05-29 11:49
SELECT 1
 USE d:\三生素数中项\等差3中升序.DBF ALIAS 等差3中表
 SELECT 2
 USE d:\三生素数中项\等差三中和统计表.DBF ALIAS 等差三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
 FOR i=1 TO 17194
   @ 9,6 say i
   jl=recno()
   PUBLIC A
   A=dcsz
      SELECT 1
      GO 17195
      FOR j=1  TO 3902
      PUBLIC B
      B=dcsz
      n=A+B
      c=n-INT((n-1)/30)*30
      d=INT((n-1)/30)*9
      IF c<21
      SELECT  2
      GO   INT(c/3)+d
      REPLACE tj2 WITH tj2+2 &&本次运行(a+b)的平方交叉部分
      ELSE
      SELECT  2
      GO 3+INT((c-10)/3)+d
      REPLACE tj2 WITH tj2+2 &&本次运行(a+b)的平方交叉部分
      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,"运行时间提示")
#84
独木星空2025-05-29 12:46
SELECT 1
USE d:\三生素数中项\等差3中元素.DBF ALIAS 等差元素
SELECT 2
USE d:\三生素数中项\等差三中和统计表.DBF ALIAS 等差三中和统计
kssj=SECONDS()
FOR i=666670 TO 1000003
   @ 3,6 say i
      SELECT 1
      GO 1
      FOR j=1  TO  9
        SELECT 1
        PUBLIC a
         a=dcys
         m=30*(i-1)+a
         SELECT  2
         APPEND BLANK   
         REPLACE dcszh WITH m
         REPLACE tj2 WITH 0
         SELECT 1
         skip
     ENDFOR
ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#85
独木星空2025-05-29 23:25
SELECT 1
 USE d:\三生素数中项\等差3中升序.DBF ALIAS 等差3中表
 SELECT 2
 USE d:\三生素数中项\等差三中和统计表.DBF ALIAS 等差三中和统计
 kssj=SECONDS()
 SELECT 1
 GO 1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
 FOR i=1 TO 17194
   @ 9,6 say i
   jl=recno()
   PUBLIC A
   A=dcsz
      SELECT 1
      GO 21097
      FOR j=1  TO 2526
      PUBLIC B
      B=dcsz
      n=A+B
      c=n-INT((n-1)/30)*30
      d=INT((n-1)/30)*9
      IF c<21
      SELECT  2
      GO   INT(c/3)+d
      REPLACE tj2 WITH tj2+2 &&本次运行(a+b)的平方交叉部分
      ELSE
      SELECT  2
      GO 3+INT((c-10)/3)+d
      REPLACE tj2 WITH tj2+2 &&本次运行(a+b)的平方交叉部分
      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,"运行时间提示")
计算a∈(0,1千万),c∈(1千3百万,1千5百万),之前已经计算了a^2,2ab,b∈(1千万,1千3百万)
#86
独木星空2025-05-31 10:27
SELECT 1
USE D:\素数式系数\四生成元至23.DBF  ALIAS 四生元参照表
SELECT 2
USE D:\素数式系数\素数13万.DBF ALIAS 素数表十三万
SELECT 3
USE D:\素数式系数\最密四生素数.DBF ALIAS 四生素数
kssj=SECONDS()                      &&取出开始时间
    FOR i=1 TO 1
     @22,20 SAY i
     SELECT 1
     GO 1
     FOR k=1 TO 700245
     ly23=四中23+4
     bpz=ly23+(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=12 OR ys=16 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 四素 WITH bpz             &&将被判断值保存到被判断值字段中(被判断值数据栏)
        ENDIF
        SELECT 1
        SKIP
        ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
用生成元及素数表制作最密四生素数
#87
独木星空2025-06-02 17:14
CLEAR ALL
SELECT 1
USE  d:\四生素数间距十\四生元至11.DBF ALIAS 生成元11
  SELECT 2
USE  d:\四生素数间距十\四生元至13.DBF ALIAS 生成元13
    kssj=SECONDS()                      &&取出开始时间
   For N=1 to 13
    @ 3,6 say N
       SELECT 1
       go 1
       for m=1 to 42
           X=scy11+2310*(N-1)
           MZ=X%13
                IF  MZ=0 OR MZ=4 OR MZ=6 OR MZ=10
                  else
                  SELECT   2     
                  APPEND BLANK            &&增加一条空记录
                  REPLACE scy13 WITH X     &&将N值付给....
                ENDIF
                SELECT 1
                SKIP
       endfor
    ENDFOR
   =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作四生素数(0,4,6,10)的生成元(逐级晋升)
#88
独木星空2025-06-02 17:19
CLEAR ALL
SELECT 1
USE  d:\四生素数间距十\四生元至13.DBF ALIAS 生成元13
  SELECT 2
USE  d:\四生素数间距十\四生元至17.DBF ALIAS 生成元17
    kssj=SECONDS()                      &&取出开始时间
   For N=1 to 17
    @ 3,6 say N
       SELECT 1
       go 1
       for m=1 to 378
           X=scy13+30030*(N-1)
           MZ=X%17
                IF  MZ=0 OR MZ=4 OR MZ=6 OR MZ=10
                  else
                  SELECT   2     
                  APPEND BLANK            &&增加一条空记录
                  REPLACE scy17 WITH X     &&将N值付给....
                ENDIF
                SELECT 1
                SKIP
       endfor
    ENDFOR
   =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作四生素数(0,4,6,10)的生成元(逐级晋升)
#89
独木星空2025-06-02 17:20
CLEAR ALL
SELECT 1
USE  d:\四生素数间距十\四生元至17.DBF ALIAS 生成元17
  SELECT 2
USE  d:\四生素数间距十\四生元至19.DBF ALIAS 生成元19
    kssj=SECONDS()                      &&取出开始时间
   For N=1 to 19
    @ 3,6 say N
       SELECT 1
       go 1
       for m=1 to 4914
           X=scy17+510510*(N-1)
           MZ=X%19
                IF  MZ=0 OR MZ=4 OR MZ=6 OR MZ=10
                  else
                  SELECT   2     
                  APPEND BLANK            &&增加一条空记录
                  REPLACE scy19 WITH X     &&将N值付给....
                ENDIF
                SELECT 1
                SKIP
       endfor
    ENDFOR
   =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作四生素数(0,4,6,10)的生成元(逐级晋升)
#90
独木星空2025-06-02 17:21
CLEAR ALL
SELECT 1
USE  d:\四生素数间距十\四生元至19.DBF ALIAS 生成元19
  SELECT 2
USE  d:\四生素数间距十\四生元至23.DBF ALIAS 生成元23
    kssj=SECONDS()                      &&取出开始时间
   For N=1 to 23
    @ 3,6 say N
       SELECT 1
       go 1
       for m=1 to 73710
           X=scy19+9699690*(N-1)
           MZ=X%23
                IF  MZ=0 OR MZ=4 OR MZ=6 OR MZ=10
                  else
                  SELECT   2     
                  APPEND BLANK            &&增加一条空记录
                  REPLACE scy23 WITH X     &&将N值付给....
                ENDIF
                SELECT 1
                SKIP
       endfor
    ENDFOR
   =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作四生素数(0,4,6,10)的生成元(逐级晋升)
#91
独木星空2025-06-12 17:13
SELECT 1
 USE d:\最密四生素数文件\四中和值1.DBF ALIAS 四中和
 kssj=SECONDS()
 FOR i=1 TO 100000
   @ 3,6 say i
   jl=recno()
   
      FOR j=1  TO 5
      s=i*210+(INT(j/2)+j)*30
      SELECT 1
      APPEND BLANK     &&增加一条空记录
      REPLACE szhz WITH s
      ENDFOR
      
 ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
给最密四中和值置数
#92
独木星空2025-06-13 00:21
在VFP中,排序表可以通过使用SORT命令或SELECT语句的ORDER BY子句来实现。
使用SORT命令
打开表:你需要打开你想要排序的表。

使用SORT命令:你可以使用SORT命令对表中的记录进行排序。下面是一个简单的例子,演示如何按照某个字段升序排序:

指定要排序的字段。
指定排序后的新表名称,如果省略,则排序结果将覆盖原表。
指定升序排序,默认即为升序。
指定降序排序。
指定排序时包含的字段列表。
例如,如果你想要按照姓名字段升序排序名为SortedTable的新表,可以使用以下命令:SORT ON 姓名 TO SortedTable。如果你想要按照年龄字段降序排序,可以使用以下命令:SORT ON 年龄 TO SortedTable DESCENDING。如果要对多个字段进行排序,可以这样写:SORT ON 姓名 ASCENDING, 年龄 ASCENDING。这将首先按照姓名字段升序排序,如果姓名相同,则按照年龄字段升序排序。

使用SELECT语句的ORDER BY子句
直接创建战队:CREATE CURSOR 临时表名(字段1 C(3), 字段2 N(5,2))
从SELECT查询语句自动生成:SELECT * RETURNING 表 INTO CURSOR 正式表名 READWRITE
这种方法不会生成新表,VFP关闭后数据库又变回原样,只是建立了一个索引文件。

以上就是在VFP中对表进行排序的几种方法。你可以根据自己的需求选择合适的方法。
#93
独木星空2025-06-14 10:40
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中统计.DBF ALIAS 四中统计
   
   kssj=SECONDS()
   FOR i=1 TO 34
      @ 3,6 say i
        fw=i*446185740
        SELECT 1
        COUNT ALL FOR ssz<fw TO tj
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 区间 WITH i
         REPLACE 范围 WITH fw
         REPLACE 总量 WITH tj
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
统计最密四生素数中项数量(各分段)
#94
独木星空2025-06-14 11:40
SELECT 1   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表   SELECT 2   USE d:\最密四生素数文件\四中和值1.DBF ALIAS 四中和值   kssj=SECONDS()   SELECT 1   GO 1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组     FOR i=1 TO 149      @ 9,6 say i      jl=recno()      PUBLIC A      A=ssz        SELECT 1        GO 1        FOR j=1  TO 14923        PUBLIC B        B=ssz        n=A+B        c=INT(n/210)*5        d=(n-210*INT(n/210))/30      IF d<2      SELECT  2      GO   c+d      REPLACE sztj WITH sztj+1 &&本次运行(a+b)的平方交叉部分      ELSE      SELECT  2      GO c+INT((d+INT(d/2))/2)      REPLACE sztj WITH sztj+1 &&本次运行(a+b)的平方交叉部分.之前丢了+1      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,"运行时间提示")分配四中和值

[此贴子已经被作者于2025-6-14 16:09编辑过]

#95
独木星空2025-06-14 16:11
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值1.DBF ALIAS 四中和值
   kssj=SECONDS()
   SELECT 1
   GO 150 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
     FOR i=1 TO 14774
      @ 9,6 say i
      jl=recno()
      PUBLIC A
      A=ssz
        SELECT 1
        GO 1
        FOR j=1  TO 14923
        PUBLIC B
        B=ssz
        n=A+B
        c=INT(n/210)*5
        d=(n-210*INT(n/210))/30
      IF d<2
      SELECT  2
      GO   c+d
      REPLACE sztj WITH sztj+1 &&本次运行(a+b)的平方交叉部分
      ELSE
      SELECT  2
      GO c+INT((d+INT(d/2))/2)
      REPLACE sztj WITH sztj+1&&本次运行(a+b)的平方交叉部分,之前丢了+1
      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,"运行时间提示")
上贴,从新编辑后,面目全非
#96
独木星空2025-06-14 18:04
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值3.DBF ALIAS 四中和3
   kssj=SECONDS()
   SELECT 1
   GO 25891 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
     FOR i=1 TO 9879
      @ 9,6 say i
      jl=recno()
      PUBLIC A
      A=ssz
        SELECT 1
        GO 1
        FOR j=1  TO 14923
        PUBLIC B
        B=ssz
        n=A+B
        c=INT(n/210)*5-10623470*2
        d=(n-210*INT(n/210))/30
      IF d<2
      SELECT  2
      GO   c+d
      REPLACE sztj WITH sztj+2 &&本次运行(a+b)的平方交叉部分
      ELSE
      SELECT  2
      GO c+INT((d+INT(d/2))/2)
      REPLACE sztj WITH sztj+2 &&本次运行(a+b)的平方交叉部分
      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,"运行时间提示")
分配四中和值3段区(1+3,3+1),还有2+2没有计算
#97
独木星空2025-06-14 18:26
SELECT * FROM 表文件 WHERE 条件

查询满足条件的记录条
#98
独木星空2025-06-14 18:40
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值3.DBF ALIAS 四中和3
   kssj=SECONDS()
   SELECT 1
   GO 14924 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
     FOR i=1 TO 10967
      @ 9,6 say i
      jl=recno()
      PUBLIC A
      A=ssz
        SELECT 1
        GO 14924
        FOR j=1  TO 10967
        PUBLIC B
        B=ssz
        n=A+B
        c=INT(n/210)*5-21246940
        d=(n-210*INT(n/210))/30
      IF d<2
      SELECT  2
      GO   c+d
      REPLACE sztj WITH sztj+1 &&本次运行(a+b)的平方交叉部分
      ELSE
      SELECT  2
      GO c+INT((d+INT(d/2))/2)
      REPLACE sztj WITH sztj+1&&本次运行(a+b)的平方交叉部分,之前丢了+1
      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,"运行时间提示")
单独计算平方项,只有段区和值是偶数时才有。比方3段区,拆分时4=1+3=3+1=2+2,有2+2是同一区间相加,而3+1或1+3是交叉项。
#99
独木星空2025-06-14 21:12
SELECT 1
 USE d:\最密四生素数文件\四中和值4.DBF ALIAS 四中和4
 SELECT 2
 USE d:\最密四生素数文件\四中和值5.DBF ALIAS 四中和5
 kssj=SECONDS()
 SELECT 1
 GO 1
 FOR i=1 TO 21246940
   @ 3,6 say i
   PUBLIC A
   A=szhz4+446185740
   jl=recno()
      SELECT 2
      APPEND BLANK     &&增加一条空记录
      REPLACE szhz5 WITH A
      SELECT 1
      skip
 ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
我把150亿分成了34个段区(每个段区包含2个素数23阶乘,即446185740),现在是利用4段区制作5段区(这里边有点绕,虽然是2个素数23阶乘周期,而实际上形成的和值是4个素数23阶乘周期,正好是2倍,它们与前后段区正好交叉一半)。
#100
独木星空2025-06-14 22:05
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值4.DBF ALIAS 四中和4
   kssj=SECONDS()
   SELECT 1
   GO 35770 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
     FOR i=1 TO 9143
      @ 9,6 say i
      jl=recno()
      PUBLIC A
      A=ssz
        SELECT 1
        GO 1
        FOR j=1  TO 14923
        PUBLIC B
        B=ssz
        n=A+B
        c=INT(n/210)*5-10623470*3
        d=(n-210*INT(n/210))/30
      IF d<2
      SELECT  2
      GO   c+d
      REPLACE sztj WITH sztj+2 &&本次运行(a+b)的平方交叉部分
      ELSE
      SELECT  2
      GO c+INT((d+INT(d/2))/2)
      REPLACE sztj WITH sztj+2 &&本次运行(a+b)的平方交叉部分
      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,"运行时间提示")
分配最密四中和值,4段区(1+4,4+1),还没有运算4段区(2+3,3+2)
#101
独木星空2025-06-14 22:32
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值4.DBF ALIAS 四中和4
   kssj=SECONDS()
   SELECT 1
   GO 25891 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
     FOR i=1 TO 9879
      @ 9,6 say i
      jl=recno()
      PUBLIC A
      A=ssz
        SELECT 1
        GO 14924
        FOR j=1  TO 10967
        PUBLIC B
        B=ssz
        n=A+B
        c=INT(n/210)*5-10623470*3
        d=(n-210*INT(n/210))/30
      IF d<2
      SELECT  2
      GO   c+d
      REPLACE sztj WITH sztj+2 &&本次运行(a+b)的平方交叉部分
      ELSE
      SELECT  2
      GO c+INT((d+INT(d/2))/2)
      REPLACE sztj WITH sztj+2 &&本次运行(a+b)的平方交叉部分
      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,"运行时间提示")
4区段中,2+3及3+2
1234