数学中国

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

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

  [复制链接]
 楼主| 发表于 2025-6-14 18:03 | 显示全部楼层
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-6-14 18:15 | 显示全部楼层
在(a+b)^2中,交叉项是2个结果,即可以调换位置形成新的运算式;而a^2或b^2是不能调换位置的,因为一样,无区别,是同一运算式。当平方项运算时,vfp程序中,内外循环处于同一平行位置,不分彼此。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-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是交叉项
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-14 20:38 | 显示全部楼层
截止2025年06月13日周五23:58分浏览量759089, 回复3725,热度279
截止2025年06月14日周六20:38分浏览量761436, 回复3733,热度279
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-14 21:10 | 显示全部楼层
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-6-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)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-14 22:31 | 显示全部楼层
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-6-14 23:15 | 显示全部楼层
截止2025年06月13日周五23:58分浏览量759089, 回复3725,热度279
截止2025年06月14日周六23:14分浏览量761636, 回复3737,热度279
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-15 08:56 | 显示全部楼层
截止2025年06月14日周六23:14分浏览量761636, 回复3737,热度279
截止2025年06月15日周日08:55分浏览量762079, 回复3738,热度279
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-15 11:32 | 显示全部楼层
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段区的合成分配问题
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 22:46 , Processed in 0.093220 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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