数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-8-18 19:57 | 显示全部楼层
SELECT 1
USE D:\nm抽取m个数\模m余数统计.DBF ALIAS 模m余数统计
kssj=SECONDS()
y0=0
y1=0
y2=0
y3=0
y4=0
y5=0
x=6*6+1 && m已经作为一个变量存在,所以文件大的没边,形成了1.9亿的记录条
    For i=1 to x
      FOR j=i+1  TO x+1
         FOR h=j+1  TO x+2
         FOR k=h+1  TO x+3
         FOR m=k+1  TO x+4
         FOR u=m+1  TO x+5
             hz=i+j+h+k+m+u
             ys=MOD(hz,6)
               DO CASE
                  CASE ys=0
                  y0=y0+1
                  CASE ys=1
                  y1=y1+1
                  CASE ys=2
                  y2=y2+1
                  CASE ys=3
                  y3=y3+1
                  CASE ys=4
                  y4=y4+1
                  CASE ys=5
                  y5=y5+1
                  ENDCASE
          ENDFOR
          ENDFOR
         ENDFOR
      ENDFOR
      ENDFOR
   ENDFOR
   SELECT  1   &&打开盛放素数式的表
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 0 &&将B值付给素数式
          REPLACE 统计 WITH y0 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 1 &&将B值付给素数式
          REPLACE 统计 WITH y1 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 2 &&将B值付给素数式
          REPLACE 统计 WITH y2 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 3 &&将B值付给素数式
          REPLACE 统计 WITH y3 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 4 &&将B值付给素数式
          REPLACE 统计 WITH y4 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 5 &&将B值付给素数式
          REPLACE 统计 WITH y5 &&将B值付给素数式
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 19:58 | 显示全部楼层
SELECT 1
USE D:\nm抽取m个数\模m余数统计.DBF ALIAS 模m余数统计
kssj=SECONDS()
y0=0
y1=0
y2=0
y3=0
y4=0
y5=0
y6=0
x=7*4+1 && m已经作为一个变量存在,所以文件大的没边,形成了1.9亿的记录条
    For i=1 to x
      FOR j=i+1  TO x+1
         FOR h=j+1  TO x+2
         FOR k=h+1  TO x+3
         FOR m=k+1  TO x+4
         FOR u=m+1  TO x+5
         FOR v=u+1  TO x+6
             hz=i+j+h+k+m+u+v
             ys=MOD(hz,7)
               DO CASE
                  CASE ys=0
                  y0=y0+1
                  CASE ys=1
                  y1=y1+1
                  CASE ys=2
                  y2=y2+1
                  CASE ys=3
                  y3=y3+1
                  CASE ys=4
                  y4=y4+1
                  CASE ys=5
                  y5=y5+1
                  CASE ys=6
                  y6=y6+1
                  ENDCASE
          ENDFOR
          ENDFOR
          ENDFOR
         ENDFOR
      ENDFOR
      ENDFOR
   ENDFOR
   SELECT  1   &&打开盛放素数式的表
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 0 &&将B值付给素数式
          REPLACE 统计 WITH y0 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 1 &&将B值付给素数式
          REPLACE 统计 WITH y1 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 2 &&将B值付给素数式
          REPLACE 统计 WITH y2 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 3 &&将B值付给素数式
          REPLACE 统计 WITH y3 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 4 &&将B值付给素数式
          REPLACE 统计 WITH y4 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 5 &&将B值付给素数式
          REPLACE 统计 WITH y5 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 6 &&将B值付给素数式
          REPLACE 统计 WITH y6 &&将B值付给素数式
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 19:58 | 显示全部楼层
SELECT 1
USE D:\nm抽取m个数\模m余数统计.DBF ALIAS 模m余数统计
kssj=SECONDS()
y0=0
y1=0
y2=0
y3=0
y4=0
y5=0
y6=0
y7=0
y8=0
y9=0
y10=0
x=11*2+1 && m已经作为一个变量存在,所以文件大的没边,形成了1.9亿的记录条
    For i=1 to x
      FOR j=i+1  TO x+1
         FOR h=j+1  TO x+2
         FOR k=h+1  TO x+3
         FOR m=k+1  TO x+4
         FOR u=m+1  TO x+5
         FOR v=u+1  TO x+6
         FOR z1=v+1  TO x+7
         FOR z2=z1+1  TO x+8
         FOR z3=z2+1  TO x+9
         FOR z4=z3+1  TO x+10
             hz=i+j+h+k+m+u+v+z1+z2+z3+z4
             ys=MOD(hz,11)
               DO CASE
                  CASE ys=0
                  y0=y0+1
                  CASE ys=1
                  y1=y1+1
                  CASE ys=2
                  y2=y2+1
                  CASE ys=3
                  y3=y3+1
                  CASE ys=4
                  y4=y4+1
                  CASE ys=5
                  y5=y5+1
                  CASE ys=6
                  y6=y6+1
                  CASE ys=7
                  y7=y7+1
                  CASE ys=8
                  y8=y8+1
                  CASE ys=9
                  y9=y9+1
                  CASE ys=10
                  y10=y10+1
                  ENDCASE
          ENDFOR
          ENDFOR
          ENDFOR
         ENDFOR
         ENDFOR
          ENDFOR
          ENDFOR
         ENDFOR
      ENDFOR
      ENDFOR
   ENDFOR
   SELECT  1   &&打开盛放素数式的表
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 0 &&将B值付给素数式
          REPLACE 统计 WITH y0 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 1 &&将B值付给素数式
          REPLACE 统计 WITH y1 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 2 &&将B值付给素数式
          REPLACE 统计 WITH y2 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 3 &&将B值付给素数式
          REPLACE 统计 WITH y3 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 4 &&将B值付给素数式
          REPLACE 统计 WITH y4 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 5 &&将B值付给素数式
          REPLACE 统计 WITH y5 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 6 &&将B值付给素数式
          REPLACE 统计 WITH y6 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 7 &&将B值付给素数式
          REPLACE 统计 WITH y7 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 8 &&将B值付给素数式
          REPLACE 统计 WITH y8 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 9 &&将B值付给素数式
          REPLACE 统计 WITH y9 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 10 &&将B值付给素数式
          REPLACE 统计 WITH y10 &&将B值付给素数式
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 19:59 | 显示全部楼层
SELECT 1
USE D:\nm抽取m个数\模m余数统计.DBF ALIAS 模m余数统计
kssj=SECONDS()
y0=0
y1=0
y2=0
y3=0
y4=0
y5=0
y6=0
y7=0
y8=0
y9=0
y10=0
y11=0
y12=0
x=13*1+1 && m已经作为一个变量存在,所以文件大的没边,形成了1.9亿的记录条
    For i=1 to x
      FOR j=i+1  TO x+1
         FOR h=j+1  TO x+2
         FOR k=h+1  TO x+3
         FOR m=k+1  TO x+4
         FOR u=m+1  TO x+5
         FOR v=u+1  TO x+6
         FOR z1=v+1  TO x+7
         FOR z2=z1+1  TO x+8
         FOR z3=z2+1  TO x+9
         FOR z4=z3+1  TO x+10
         FOR z5=z4+1  TO x+11
         FOR z6=z5+1  TO x+12
             hz=i+j+h+k+m+u+v+z1+z2+z3+z4+z5+z6
             ys=MOD(hz,13)
               DO CASE
                  CASE ys=0
                  y0=y0+1
                  CASE ys=1
                  y1=y1+1
                  CASE ys=2
                  y2=y2+1
                  CASE ys=3
                  y3=y3+1
                  CASE ys=4
                  y4=y4+1
                  CASE ys=5
                  y5=y5+1
                  CASE ys=6
                  y6=y6+1
                  CASE ys=7
                  y7=y7+1
                  CASE ys=8
                  y8=y8+1
                  CASE ys=9
                  y9=y9+1
                  CASE ys=10
                  y10=y10+1
                   CASE ys=11
                  y11=y11+1
                   CASE ys=12
                  y12=y12+1
                  ENDCASE
          ENDFOR
          ENDFOR
          ENDFOR
          ENDFOR
          ENDFOR
         ENDFOR
         ENDFOR
          ENDFOR
          ENDFOR
         ENDFOR
      ENDFOR
      ENDFOR
   ENDFOR
   SELECT  1   &&打开盛放素数式的表
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 0 &&将B值付给素数式
          REPLACE 统计 WITH y0 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 1 &&将B值付给素数式
          REPLACE 统计 WITH y1 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 2 &&将B值付给素数式
          REPLACE 统计 WITH y2 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 3 &&将B值付给素数式
          REPLACE 统计 WITH y3 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 4 &&将B值付给素数式
          REPLACE 统计 WITH y4 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 5 &&将B值付给素数式
          REPLACE 统计 WITH y5 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 6 &&将B值付给素数式
          REPLACE 统计 WITH y6 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 7 &&将B值付给素数式
          REPLACE 统计 WITH y7 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 8 &&将B值付给素数式
          REPLACE 统计 WITH y8 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 9 &&将B值付给素数式
          REPLACE 统计 WITH y9 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 10 &&将B值付给素数式
          REPLACE 统计 WITH y10 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 11 &&将B值付给素数式
          REPLACE 统计 WITH y11 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE m余 WITH 12 &&将B值付给素数式
          REPLACE 统计 WITH y12 &&将B值付给素数式
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 20:03 | 显示全部楼层
这是分析1--mn个数中,抽取m个不同数,其和模m余数是0的抽取方法数的分析中,编辑的vfp程序,在此中,第一次尝试运用分枝语句:
DO CASE
                  CASE ys=0
                  y0=y0+1


ENDCASE
语句。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-19 19:06 | 显示全部楼层
SELECT 1
USE D:\VFP温习\L6二生素数表.DBF ALIAS 二生素数表
SELECT 2
USE D:\VFP温习\L6二生素数四.DBF ALIAS 二生素数四
kssj=SECONDS()
For i=1 TO  6852710
      @ 5,12 say i
      m=1
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=二生6中
    count next m+1 for 2*m=二生6中-A to js1
        IF js1=1
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二6四 WITH A+m &&将N值付给素数式
         else
       ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-19 19:09 | 显示全部楼层
SELECT 1
USE D:\vfp温习\L6二生素数四.DBF ALIAS 二生四
SELECT 2
USE D:\vfp温习\L6四生素数统计表.DBF ALIAS 四生统计

kssj=SECONDS()
  SELECT 1
  For i=1 to 9 && 这个循环13次,是因为累计2的分布值有13条记录,代表13种素数式的排列(2-5生)
    @ 3,6 say i
     fw=10^i
            && jlh1=RECNO()
            SELECT 1
            GO 1
            COUNT ALL FOR fw>二6四 TO tj
              SELECT  2   &&打开盛放素数式的表
              APPEND BLANK     &&增加一条空记录
              REPLACE 范围 WITH fw
              REPLACE 跨度 WITH 2
              REPLACE 统计 WITH tj
              REPLACE k生 WITH 4
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-20 07:42 | 显示全部楼层
SELECT 1
USE D:\VFP温习\L6二生素数表.DBF ALIAS 二生素数表
SELECT 2
USE D:\VFP温习\L6二生素数四.DBF ALIAS 二生素数四
SELECT 3
USE D:\vfp温习\L6四生素数统计表.DBF ALIAS 四生统计
kssj=SECONDS()
FOR m=5 TO 10
SELECT 2
DELETE ALL
PACK
SELECT  1
GO 1
    For i=1 TO  6852730-m
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=二生6中
    count next m+1 for 2*m=二生6中-A to js1
        IF js1=1
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二6四 WITH A+m &&将N值付给素数式
         else
       ENDIF
      SELECT 1
      GO jl+1
     ENDFOR
   
     SELECT 2
     For j=1 to 9
      @ 3,6 say j
      fw=10^j
            SELECT 2
            GO 1
            COUNT ALL FOR fw>二6四 TO tj
              SELECT  3  &&打开盛放素数式的表
              APPEND BLANK     &&增加一条空记录
              REPLACE 范围 WITH fw
              REPLACE 跨度 WITH 2*m
              REPLACE 统计 WITH tj
              REPLACE k生 WITH 4
   ENDFOR
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
对二生素数(P,P+6)的中项差合成数的寻找并进行统计(二合一程序,一过成)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-21 12:21 | 显示全部楼层
SELECT 1
USE D:\素数式系数\素数表十亿.dbf ALIAS 素数表
SELECT 2
USE D:\素数式系数\k生素数系数表.dbf ALIAS 系数表
kssj=SECONDS()  &&取出开始时间
FOR n=81 TO 1000
    @ 5,12 say n
    s=1.0000000000000000
         IF MOD(2*n,3)=0
          s=s*2
          ENDIF      
          SELECT 1
          GO 3
          zhi=.f.
        DO WHILE NOT zhi
        SELECT 1
        P=素数
        IF 2*n>=P
        zhi=.f.
        ELSE
        zhi=.t.
        ENDIF
        
           DO case
           CASE MOD(2*n,P)=0
           s=s*(P-2)/(P-4)
           CASE  MOD(2*n,P)=MOD(6,P)
           s=s*(P-3)/(P-4)
           CASE  MOD(2*n,P)=MOD(-6,P)
           s=s*(P-3)/(P-4)
           otherwise
           s=s*1
           ENDCASE
         SELECT 1
         SKIP
         ENDDO
         
           SELECT 2
           APPEND BLANK     &&增加一条空记录
           REPLACE k生 WITH 4 &&将B值付给素数式
           REPLACE 二kd WITH 2*n &&将B值付给素数式
           REPLACE 系数 WITH 4.15118086356237*s &&将B值付给素数式
  ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-21 12:22 | 显示全部楼层
SELECT 1
USE D:\素数式系数\素数表十亿.dbf ALIAS 素数表
SELECT 2
USE D:\素数式系数\k生素数系数表10的.dbf ALIAS 系数表
kssj=SECONDS()  &&取出开始时间
FOR n=1 TO 1000
    @ 5,12 say n
    s=1.0000000000000000
         IF MOD(6*n,5)=0
          s=s*(5-1)/(5-2)
          ENDIF      
          SELECT 1
          GO 4
          zhi=.f.
        DO WHILE NOT zhi
        SELECT 1
        P=素数
        IF 6*n>=P
        zhi=.f.
        ELSE
        zhi=.t.
        ENDIF
        
           DO case
           CASE MOD(6*n,P)=0
           s=s*(P-2)/(P-4)
           CASE  MOD(6*n,P)=MOD(10,P)
           s=s*(P-3)/(P-4)
           CASE  MOD(6*n,P)=MOD(-10,P)
           s=s*(P-3)/(P-4)
           otherwise
           s=s*1
           ENDCASE
         SELECT 1
         SKIP
         ENDDO
         
           SELECT 2
           APPEND BLANK     &&增加一条空记录
           REPLACE k生 WITH 4 &&将B值付给素数式
           REPLACE 二kd WITH 6*n &&将B值付给素数式
           REPLACE 系数 WITH 12.4535425906871*s &&将B值付给素数式
  ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 01:01 , Processed in 0.097914 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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