数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-2-25 20:21 | 显示全部楼层
use
MODIFY COMMAND d:\循环往复\制作最密素数式链条.prg AS 936
MODIFY PROJECT d:\循环往复\圆周式.pjx
USE 标记同跨度k生数 AGAIN IN 0
SELECT 标记同跨度k生数
BROWSE LAST
DELETE ALL
PACK
USE 标记同跨度记录条分布列 AGAIN IN 0
SELECT 标记同跨度记录条分布列
BROWSE LAST
use
USE 记录条大小值 AGAIN IN 0
SELECT 记录条大小值
BROWSE LAST
use
USE 零位表 AGAIN IN 0
SELECT 零位表
BROWSE LAST
DELETE ALL
PACK
USE 素数表 AGAIN IN 0
SELECT 素数表
BROWSE LAST
go 18
use
USE 素数式链条 AGAIN IN 0
SELECT 素数式链条
BROWSE LAST
DELETE ALL
PACK
USE 素数式链条结果 AGAIN IN 0
SELECT 素数式链条结果
BROWSE LAST
DELETE ALL
PACK
USE 素数式优 AGAIN IN 0
SELECT 素数式优
BROWSE LAST
DELETE ALL
PACK
USE 同跨度记录条分布列 AGAIN IN 0
SELECT 同跨度记录条分布列
BROWSE LAST
DELETE ALL
PACK
SELECT 同跨度记录条分布列
BROWSE LAST
use
MODIFY COMMAND d:\循环往复\制作同跨度素数式链条.prg AS 936
MODIFY COMMAND d:\循环往复\制作同跨度素数式表.prg AS 936
DO d:\循环往复\制作同跨度素数式表.prg
MODIFY COMMAND d:\循环往复\制作同跨度素数式表.prg AS 936
SELECT 同跨度
BROWSE LAST
?reccount()
use
MODIFY COMMAND d:\循环往复\统计标记同跨度记录条分布.prg AS 936
MODIFY COMMAND d:\循环往复\提取标记同跨度中记录条大小值.prg AS 936
DO d:\循环往复\提取标记同跨度中记录条大小值.prg
SELECT 大小值
BROWSE LAST
use
MODIFY COMMAND d:\循环往复\统计标记同跨度记录条分布.prg AS 936
DO d:\循环往复\统计标记同跨度记录条分布.prg
MODIFY COMMAND d:\循环往复\统计标记同跨度记录条分布.prg AS 936
SELECT 记录条分布
BROWSE LAST
use
MODIFY COMMAND d:\循环往复\制作最密素数式链条.prg AS 936
这两天比较忙,没有多少时间做运算,出结果。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-2 21:08 | 显示全部楼层
?2021-2021+20210302
USE 标记同跨度k生数 AGAIN IN 0
SELECT 标记同跨度k生数
BROWSE LAST
DELETE ALL
PACK
USE 标记同跨度记录条分布列 AGAIN IN 0
SELECT 标记同跨度记录条分布列
BROWSE LAST
use
USE 记录条大小值 AGAIN IN 0
SELECT 记录条大小值
BROWSE LAST
use
USE 零位表 AGAIN IN 0
SELECT 零位表
BROWSE LAST
DELETE ALL
PACK
USE 素数式链条 AGAIN IN 0
SELECT 素数式链条
BROWSE LAST
DELETE ALL
PACK
USE 素数式链条结果 AGAIN IN 0
SELECT 素数式链条结果
BROWSE LAST
DELETE ALL
PACK
USE 素数式优 AGAIN IN 0
SELECT 素数式优
BROWSE LAST
DELETE ALL
PACK
USE 同跨度记录条分布列 AGAIN IN 0
SELECT 同跨度记录条分布列
BROWSE LAST
DELETE ALL
PACK
MODIFY COMMAND d:\循环往复\制作同跨度素数式链条.prg AS 936
MODIFY COMMAND d:\循环往复\制作同跨度素数式表.prg AS 936
DO d:\循环往复\制作同跨度素数式表.prg
SELECT 同跨度
BROWSE LAST
?reccount()
use
MODIFY COMMAND d:\循环往复\提取标记同跨度中记录条大小值.prg AS 936
DO d:\循环往复\提取标记同跨度中记录条大小值.prg
SELECT 大小值
BROWSE LAST
DELETE NEXT 1
PACK
MODIFY COMMAND d:\循环往复\提取标记同跨度中记录条大小值.prg AS 936
DO d:\循环往复\提取标记同跨度中记录条大小值.prg
SELECT 大小值
BROWSE LAST
use
MODIFY COMMAND d:\循环往复\统计标记同跨度记录条分布.prg AS 936
DO d:\循环往复\统计标记同跨度记录条分布.prg
USE 记录条大小值 AGAIN IN 0
SELECT 记录条大小值
BROWSE LAST
use
SELECT 记录条分布
BROWSE LAST
use
MODIFY COMMAND d:\循环往复\制作最密素数式链条.prg AS 936
USE 素数表 AGAIN IN 0
SELECT 素数表
BROWSE LAST
go
go 18
DO d:\循环往复\制作最密素数式链条.prg
SELECT 素数式链
BROWSE LAST
?reccount()
use
MODIFY COMMAND d:\循环往复\制作零位表.prg AS 936
DO d:\循环往复\制作零位表.prg
SELECT 零位
BROWSE LAST
?reccount()
use
MODIFY COMMAND d:\循环往复\打分素数式链条.prg AS 936
DO d:\循环往复\打分素数式链条.prg
MODIFY COMMAND d:\循环往复\打分素数式链条.prg AS 936
SELECT K生数分布
BROWSE LAST
?reccount()
use
MODIFY COMMAND d:\循环往复\提取记录条大小值.prg AS 936
DO d:\循环往复\提取记录条大小值.prg
SELECT 大小值
BROWSE LAST
use
MODIFY COMMAND d:\循环往复\统计记录条分布.prg AS 936
DO d:\循环往复\统计记录条分布.prg
SELECT 记录条分布
BROWSE LAST
?sum 统计
?sum(统计)
COPY TO d:\循环往复\素数式链条444分布筛选后.xls TYPE XL5
use
MODIFY COMMAND d:\循环往复\导出符合条件的素数式.prg AS 936
DO d:\循环往复\导出符合条件的素数式.prg
SELECT 素数式优
BROWSE LAST
COPY TO d:\循环往复\素数式链条444优.xls TYPE XL5
use
这是处理跨度444的全部操作过程。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 16:19 | 显示全部楼层
SELECT 1
USE D:\循环往复\素数式至19.dbf ALIAS 素数式19
SELECT 2
USE D:\循环往复\标记同跨度k生数.dbf ALIAS 同跨度
kssj=SECONDS()                      &&取出开始时间
   SELECT 1
   go 1
   FOR  j=1 TO 829440
      s11=式19
      jlz=recno()  &&记住位置
        kd=0 && 开始时,给kd赋值为0
        jll=0 &&记录条累计,即下边循环了几次
             do while kd<=446
             SELECT 1
             ssyd=式19
             kd=ssyd-s11
             jll=jll+1
             SELECT 1
             skip
             enddo
        if jll>=82
        SELECT 2
        APPEND BLANK
        REPLACE 跨度 WITH 446 &&改成本次追加记录的字段
        REPLACE 记录条 WITH jll-1 && 因为跳出内循环时jll已经在大于420的下一个位置(即多了一条记录)
        REPLACE 起始号 WITH jlz
        endif
     SELECT 1
     go  jlz+1
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是制作素数式第一步。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 16:23 | 显示全部楼层
SELECT 1
USE D:\循环往复\标记同跨度k生数.dbf ALIAS 标记同跨度
SELECT 2
USE D:\循环往复\记录条大小值.dbf ALIAS 大小值
kssj=SECONDS()                      &&取出开始时间
   SELECT 1
   go 1
   jlt0=记录条
   jltd=jlt0
   jltx=jlt0
   FOR  j=1 TO 14871
      jltb=记录条
      if jltx>jltb
      jltx=jltb
      else
      jltx=jltx
      endif
      
       if jltd<jltb
      jltd=jltb
      else
      jltd=jltd
      endif
      SELECT 1
      skip
   endfor
      
        SELECT 2
        APPEND BLANK
        
        REPLACE 记录小 WITH jltx
        REPLACE 记录大 WITH jltd
        REPLACE 原跨度 WITH 444
   
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
&&主题思路:先找一个垫底参考值,然后比较与下一个值的大小关系,大赋给大值,小赋给小值,比原来大,小值不变,用原先的;比原来小,大值不变,取原来的。
这是第二步,提取最大值,最小值(指记录条--互素式的个数)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 16:27 | 显示全部楼层
SELECT 1
USE D:\循环往复\标记同跨度k生数.dbf ALIAS 标记同跨度
SELECT 2
USE D:\循环往复\标记同跨度记录条分布列.dbf ALIAS 记录条分布
kssj=SECONDS()                      &&取出开始时间
   SELECT 1
   go 1
   FOR  j=1 TO 6
        jlt=80+j
        count all for 记录条=jlt to js
                 SELECT 2
                 APPEND BLANK
                 
                 REPLACE 互素式 WITH jlt
                 REPLACE 统计 WITH js
                 REPLACE 原跨度  WITH 446 &&改成本次追加记录的字段
     SELECT 1
     go  1
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是第三步,统计各个不同素数式个数的记录条数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 16:35 | 显示全部楼层
SELECT 1
USE D:\循环往复\素数a不余.dbf ALIAS 素数a  &&比制作表的素数值小(即下表)        原表在条件为真时
SELECT 2
USE D:\循环往复\素数a余数参考.dbf ALIAS 素数a余数 &&比上边已筛除的素数值要大  在条件为假时参考表
SELECT 3
USE D:\循环往复\素数b不余.dbf ALIAS 素数b  &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同   在条件为真时制造表,即新表
SELECT 4
USE D:\循环往复\素数b余数参考.dbf ALIAS 素数b余数 &&比上边已筛除的素数值要大         在条件为真时参考表
SELECT 5
USE D:\循环往复\素数表.dbf ALIAS 素数表参 &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同
SELECT 6
USE D:\循环往复\素数式至19.dbf ALIAS 素数式19  &&比制作表的素数值小(即下表)    原表在条件为真时
SELECT 7
USE D:\循环往复\标记同跨度k生数.dbf ALIAS 同跨度  &&比制作表的素数值小(即下表)    原表在条件为真时
SELECT 8
USE D:\循环往复\素数式链条.dbf ALIAS 素数式链  &&比制作表的素数值小(即下表)    原表在条件为真时
kssj=SECONDS()   &&取出开始时间
SELECT 7
go 1
for scxh=1 to 14871 &&最外一层嵌套,根据表中记录条调节循环次数
  @ 15,20 say scxh
qsh=起始号
jlt=记录条
SELECT 1
DELETE ALL
PACK    &&下步要制作1表,所以清空,不留数据
    SELECT 6
    go qsh
    s11d=式19 &&这里定个橛子,下边循环一周减它形成素数式
          for  j=1  to  jlt
          s11b=式19  &&给变量s11b赋值(s代表式,11代表至11的素数式,b是变的第一个字母)
           sss=s11b-s11d
           SELECT 1
           APPEND BLANK
          REPLACE 素a WITH sss
          SELECT 6
          skip
         endfor
      
  SELECT 5
  GO 8 &&从素数23开始
FOR n=1 TO 11   &&第二层嵌套
@ 5,10 say n
ss=素数
      IF MOD(n,2)=1 &&条件为真时,由a表制作b表,a表用一个,b表用2个,a表,为1和2,1表为主;b表为3和4,3表为主表
               SELECT 3
               DELETE ALL
               PACK    &&这步要用到3,4表,所以清空它们
               SELECT 4
               DELETE ALL
               pack   &&这步要用到3,4表,所以清空它们
               SELECT 1  
              zjl1=RECCOUNT()  &&把素数a不余的记录条数赋给变量zjl1
              GO 1            
              FOR i=1 TO zjl1 &&这个范围远远超过出现最后一个余数的记录条数
              A=素a &&改成表1的字段名
              jlz=RECNO()  &&记住指针所在位置
              SELECT 1  &&进入循环开始已经把表3,4清空了,所以无法满足条件,形同虚设,不过今天有了用处,可以判断记录条数与素数的大小关系,决定是否跳出循环
              jlzs2=RECCOUNT()  &&核对表2记录条总数
              IF jlzs2<ss &&改成将要制作参考表的素数值,即表2中的素数值(以前是等于号,不知道基于什么,现在也想不起原先的设计思路)
              exit  &&判断总记录条是否小于待过关素数,如果小于就跳出循环
              ENDIF
              ys=MOD(A,ss) &&改成将要制作参考表的素数值,即表2中的素数值
              SELECT 4
               count all for ys=余数b to js  &&改成将要制作参考表的字段名,即表2中的字段名
               IF js=0
               SELECT 4
               APPEND BLANK
               REPLACE 余数b WITH ys &&改成本次追加记录的字段名,即表2的字段名
               REPLACE 记录值 WITH jlz
               ENDIF
               SELECT 1
               skip
               ENDFOR
               SELECT 4
               zjl4=RECCOUNT()  &&把表4的记录条数赋给变量zjl4
   
               if zjl4<ss
                   SELECT 1
                  zjl1qb=RECCOUNT() &&当参考余数表中的余数种类少于过关素数时,整表照搬
                  GO 1
                  FOR ccb1sj=1 TO zjl1qb &&重抄表1数据
                  ccsa=素a
                  SELECT 3
                  APPEND BLANK
                  REPLACE 素b WITH ccsa &&改成本次追加记录的字段
                  SELECT 1
                   SKIP
                   endfor
               ELSE
               
               GO ss
               DELETE NEXT 1
               pack
               SELECT 1
               GO 1
                &&jlzs1=RECCOUNT()  核对表2记录条总数            
                DO WHILE NOT EOF() && FOR i=1 TO jlzs1  &&循环次数改成,SELECT 1 的总记录条数
                A=素a  &&设成表1的字段名
                ys=MOD(A,ss) &&对3表的素数求余数
                SELECT 4
                count all for ys=余数b to js
                IF js=1
                SELECT 3
                APPEND BLANK
                REPLACE 素b WITH A &&改成本次追加记录的字段
                ENDIF
                SELECT 1
                skip
                ENDDO
                endif
   
        ELSE  &&条件为假时,由b表制作a表,b表用一个,a表用2个  (a表,为1和2,1表为主;b表为3和4,3表为主表)

                SELECT 1
                DELETE ALL
                PACK    &&这步要用到1,2表,所以清空它们
                SELECT 2
                DELETE ALL
                pack   &&这步要用到1,2表,所以清空它们

                SELECT 3
                zjl3=RECCOUNT()  &&把素数a不余的记录条数赋给变量zjl1
                GO 1            
                FOR i=1 TO zjl3 &&这个范围远远超过出现最后一个余数的记录条数
                A=素b &&改成表1的字段名
                jlz=RECNO()  &&记住指针所在位置
                SELECT 3
                jlzs2=RECCOUNT()  &&核对表2记录条总数
                IF jlzs2<ss &&改成将要制作参考表的素数值,即表2中的素数值
                 exit
                 ENDIF
                  ys=MOD(A,ss) &&改成将要制作参考表的素数值,即表2中的素数值
                  SELECT 2
                  count all for ys=余数a to js  &&改成将要制作参考表的字段名,即表2中的字段名
                  IF js=0
                   SELECT 2
                   APPEND BLANK
                   REPLACE 余数a WITH ys &&改成本次追加记录的字段名,即表2的字段名
                   REPLACE 记录值 WITH jlz
                   ENDIF
                   SELECT 3
                   skip
                   ENDFOR
   
                   SELECT 2
                   zjl2=RECCOUNT()  &&把表2的记录条数赋给变量zjl2
                   if zjl2<ss
                         SELECT 3
                         zjl3qb=RECCOUNT() &&当参考余数表中的余数种类少于过关素数时,整表照搬
                         GO 1
                         FOR ccb1sj=1 TO zjl3qb &&重抄表1数据
                         ccsb=素b
                         SELECT 1
                        APPEND BLANK
                        REPLACE 素a WITH ccsb &&改成本次追加记录的字段
                        SELECT 3
                        SKIP
                        endfor
                    ELSE
                    
                      GO ss
                     DELETE NEXT 1
                     pack
                    SELECT 3
                    GO 1
                    &&jlzs1=RECCOUNT()  核对表2记录条总数            
                    DO WHILE NOT EOF() && FOR i=1 TO jlzs1  &&循环次数改成,SELECT 1 的总记录条数
                    A=素b  &&设成表1的字段名
                    ys=MOD(A,ss) &&对3表的素数求余数
                    SELECT 2
                    count all for ys=余数a to js
                    IF js=1
                    SELECT 1
                    APPEND BLANK
                   REPLACE 素a WITH A &&改成本次追加记录的字段
                   ENDIF
                   SELECT 3
                   skip
                   ENDDO
                   endif
         
           ENDIF
           SELECT 5 && 外循环是选择素数表
           skip
           endfor   &&第二层嵌套
   
     IF MOD(n,2)=1
          SELECT 3
         zjl3f=RECCOUNT()
          go 1
          for m=1 to zjl3f
          sssf=素b
          SELECT 8
          APPEND BLANK
          REPLACE 素数式 WITH sssf
          SELECT 3
          skip
          endfor
         
      else
            
             SELECT 1
             zjl1f=RECCOUNT()
             go 1
              for g=1 to zjl1f
              sssf=素a
              SELECT 8
              APPEND BLANK
              REPLACE 素数式 WITH sssf
              SELECT 1
              skip
             endfor
       endif
      
SELECT 7
  skip
  endfor      最外一层嵌套
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是第四步,也是最主要的一步。完成素数式的排查工作(即除掉不过关的素数式)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 16:38 | 显示全部楼层
一般情况下,当素数式的个数有了新增,预示着k生素数式中的k升级(即增大1个素数式)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 17:11 | 显示全部楼层
SELECT 1
USE D:\循环往复\素数式链条.dbf ALIAS 素数链
SELECT 2
USE D:\循环往复\零位表.dbf ALIAS 零位
kssj=SECONDS()                      &&取出开始时间
   SELECT 1
   go 1
   FOR  j=1 TO 1131746
      sss=素数式
      jlz=recno()  &&记住位置
          IF sss=0
          SELECT 2
          APPEND BLANK
          REPLACE O位 WITH   jlz
          endif
    SELECT 1
    skip
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
&& 这是一个标记“0”位的程序,主要目的是储存间断点所在记录条位置,为后边打分数据段做准备。
这是第五步,制作“0”位表。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 17:13 | 显示全部楼层
SELECT 1
USE D:\循环往复\素数式链条.dbf ALIAS 素数链
SELECT 2
USE D:\循环往复\零位表.dbf ALIAS 零位表
SELECT 3
USE D:\循环往复\素数式链条结果.dbf ALIAS k生数分布
kssj=SECONDS()                      &&取出开始时间
   SELECT 2
   go 1
   FOR  j=1 TO 14871
        Ow1=O位
        jlz=recno()  &&记住位置
        SKIP
        Ow2=O位
        jlt=Ow2-Ow1
            SELECT 1
            GO Ow2-1
            kd=素数式
                 SELECT 3
                 APPEND BLANK
                 REPLACE 跨度 WITH kd &&改成本次追加记录的字段
                 REPLACE 记录条 WITH jlt
                 REPLACE 起始号 WITH Ow1
     SELECT 2
     go  jlz+1
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
&& 在上一个程序基础上,继续打分素数式链条,得到跨度,记录条数,起始位置信息,以便摘抄符合要求的素数式段落。
这是第六步,打分素数式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 17:34 | 显示全部楼层
SELECT 1
USE D:\循环往复\素数式链条结果.dbf ALIAS 素数式结果
SELECT 2
USE D:\循环往复\记录条大小值.dbf ALIAS 大小值
kssj=SECONDS()                      &&取出开始时间
   SELECT 1
   go 1
   jlt0=记录条
   jltd=jlt0
   jltx=jlt0
   FOR  j=1 TO 14871
      jltb=记录条
      if jltx>jltb
      jltx=jltb
      else
      jltx=jltx
      endif
      
       if jltd<jltb
      jltd=jltb
      else
      jltd=jltd
      endif
      SELECT 1
      skip
   endfor
      
        SELECT 2
        APPEND BLANK
        REPLACE 记录大 WITH jltd
        REPLACE 记录小 WITH jltx
        REPLACE 原跨度 WITH 446
   
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
&&主题思路:先找一个垫底参考值,然后比较与下一个值的大小关系,大赋给大值,小赋给小值,比原来大,小值不变,用原先的;比原来小,大值不变,取原来的。
这是第七步,提取剔除不过关的素数式中素数式个数的大小值。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 14:51 , Processed in 0.097353 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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