| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2059 人关注过本帖
标题:简单的筛选二生素数程序
取消只看楼主 加入收藏
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
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,"运行时间提示")
上贴,从新编辑后,面目全非

素数问题的解决是我学习编程永恒的动力。
2025-06-14 16:11
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
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没有计算

素数问题的解决是我学习编程永恒的动力。
2025-06-14 18:04
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
SELECT * FROM 表文件 WHERE 条件

查询满足条件的记录条

素数问题的解决是我学习编程永恒的动力。
2025-06-14 18:26
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
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是交叉项。

素数问题的解决是我学习编程永恒的动力。
2025-06-14 18:40
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
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倍,它们与前后段区正好交叉一半)。

素数问题的解决是我学习编程永恒的动力。
2025-06-14 21:12
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
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)

素数问题的解决是我学习编程永恒的动力。
2025-06-14 22:05
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
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

素数问题的解决是我学习编程永恒的动力。
2025-06-14 22:32
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值34.DBF ALIAS 四中和34
   SELECT 3
   USE d:\最密四生素数文件\四中统计表.DBF ALIAS 四中统计表
   kssj=SECONDS()
   SELECT 3
   GO 1
   FOR k=1 TO 17
   jl1=recno()
   PUBLIC ZL1
   ZL1=总量
   PUBLIC FL1
   FL1=分量
   czhi=35-k &&czhi代表差值,即合成区间分量
   SELECT 3
   GO czhi
   PUBLIC ZL2
   ZL2=总量
   PUBLIC FL2
   FL2=分量
        SELECT 1
        GO ZL1-FL1+1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
        FOR i=1 TO FL1
        && @ 9,6 say i
        jl=recno()
        PUBLIC A
        A=ssz
           SELECT 1
           GO ZL2-FL2+1&&到段区起始位置
           FOR j=1  TO FL2&&循环本区间的数据量
           PUBLIC B
           B=ssz
           n=A+B
           c=INT(n/210)*5-10623470*33
           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
 GO jl1+1
 ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
一次性完成34段区的合成分配问题

素数问题的解决是我学习编程永恒的动力。
2025-06-15 11:33
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
  SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值34.DBF ALIAS 四中和34
   SELECT 3
   USE d:\最密四生素数文件\四中统计表.DBF ALIAS 四中统计表
   kssj=SECONDS()
   SELECT 3
   GO 1
   FOR k=1 TO 17
    @ 9,6 say k
   jl1=recno()
   PUBLIC ZL1
   ZL1=总量
   PUBLIC FL1
   FL1=分量
   czhi=35-k &&czhi代表差值,即合成区间分量
   SELECT 3
   GO czhi
   PUBLIC ZL2
   ZL2=总量
   PUBLIC FL2
   FL2=分量
        SELECT 1
        GO ZL1-FL1+1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
        FOR i=1 TO FL1
         && @ 19,16 say i
        jl=recno()
        PUBLIC A
        A=ssz
           SELECT 1
           GO ZL2-FL2+1&&到段区起始位置
           FOR j=1  TO FL2&&循环本区间的数据量
           PUBLIC B
           B=ssz
           n=A+B
           c=INT(n/210)*5-350574510&&10623470*33
           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
 SELECT 3&&原来这里没有选择工作区导致第二次循环时中断
 GO jl1+1
 ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
上一个程序有点瑕疵

素数问题的解决是我学习编程永恒的动力。
2025-06-15 14:19
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:1312
专家分:683
注 册:2016-6-29
收藏
得分:0 
SELECT 1
   USE d:\最密四生素数文件\四中升序.DBF ALIAS 四中表
   SELECT 2
   USE d:\最密四生素数文件\四中和值33.DBF ALIAS 四中和33
   SELECT 3
   USE d:\最密四生素数文件\四中统计表.DBF ALIAS 四中统计表
   kssj=SECONDS()
   SELECT 3
   GO 1
   FOR k=1 TO 16
    @ 9,6 say k
   jl1=recno()
   PUBLIC ZL1
   ZL1=总量
   PUBLIC FL1
   FL1=分量
   czhi=34-k &&czhi代表差值,即合成区间分量
   SELECT 3
   GO czhi
   PUBLIC ZL2
   ZL2=总量
   PUBLIC FL2
   FL2=分量
        SELECT 1
        GO ZL1-FL1+1 &&定位在第一个参与运算值上,本次运行交叉部分,外循坏取前段,内循环取后段,一次产生两组
        FOR i=1 TO FL1
         && @ 19,16 say i
        jl=recno()
        PUBLIC A
        A=ssz
           SELECT 1
           GO ZL2-FL2+1&&到段区起始位置
           FOR j=1  TO FL2&&循环本区间的数据量
           PUBLIC B
           B=ssz
           n=A+B
           c=INT(n/210)*5-339951040&&10623470*32
           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
 SELECT 3&&原来这里没有选择工作区导致第二次循环时中断
 GO jl1+1
 ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")

素数问题的解决是我学习编程永恒的动力。
2025-06-15 16:47
快速回复:简单的筛选二生素数程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018825 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved