数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-8-21 12:22 | 显示全部楼层
SELECT 1
USE D:\素数式系数\素数表万.dbf ALIAS 素数表
SELECT 2
USE D:\素数式系数\k生素数系数表14的.dbf ALIAS 系数表
kssj=SECONDS()  &&取出开始时间
FOR n=1 TO 1000
    @ 5,12 say n
    s=1.0000000000000000
         IF MOD(6*n,7)=0
          s=s*(7-1)/(7-2)
          ENDIF      
          SELECT 1
          GO 3
          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(14,P)
           s=s*(P-3)/(P-4)
           CASE  MOD(6*n,P)=MOD(-14,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 6.91863477260395*s &&将B值付给素数式
  ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-21 12:23 | 显示全部楼层
SELECT 1
USE D:\素数式系数\素数表万.dbf ALIAS 素数表
SELECT 2
USE D:\素数式系数\k生素数系数表22的.dbf ALIAS 系数表
kssj=SECONDS()  &&取出开始时间
FOR n=1 TO 1000
    @ 5,12 say n
    s=1.0000000000000000
         IF MOD(6*n,11)=0
          s=s*(11-1)/(11-2)
          ENDIF      
          SELECT 1
          GO 3
          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(22,P)
           s=s*(P-3)/(P-4)
           CASE  MOD(6*n,P)=MOD(-22,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 5.3372325388659*s &&将B值付给素数式
  ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-21 12:25 | 显示全部楼层
以上四楼是求二生素数(P,P+2k)的中项差合成数的数量公式中的系数程序,原先是在Excel中手工操作获得的。
回复 支持 反对

使用道具 举报

发表于 2021-8-22 18:55 | 显示全部楼层
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=91 TO 100
@ 15,22 say m
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,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 06:31 | 显示全部楼层
SELECT 1
USE D:\VFP温习\L10二生素数表.DBF ALIAS 二生素数表
SELECT 2
USE D:\VFP温习\L10二生素数四.DBF ALIAS 二生素数四
SELECT 3
USE D:\vfp温习\L10四生素数统计表.DBF ALIAS 四生统计
kssj=SECONDS()
FOR m=18 TO 30
@ 15,22 say m
SELECT 2
DELETE ALL
PACK
SELECT  1
GO 1
    For i=1 TO  4570073-m
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=二生10中
    count next m+1 for 6*m=二生10中-A to js1
        IF js1=1
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二10四 WITH A+3*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>二10四 TO tj
              SELECT  3  &&打开盛放素数式的表
              APPEND BLANK     &&增加一条空记录
              REPLACE 范围 WITH fw
              REPLACE 跨度 WITH 6*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,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 10:10 | 显示全部楼层
SELECT 1
USE D:\素数式系数\素数式.dbf ALIAS 素数式
SELECT 2
USE D:\素数式系数\余数表.dbf ALIAS 余数表
SELECT 3
USE D:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
SELECT 1
  k=3  &&k=RECCOUNT()
SELECT 3
   GO 3
    s=1.0000000000000000
       FOR  i=1 TO 50876320  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
        @ 5,12 say i
        SELECT 3
        p=素数
        jl=recno()
        s=s*p^(k-1)*(p-k)/(p-1)^k
         SELECT 3
            GO jl+1
     ENDFOR
?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
今天计算出:∏\({P^2(P-3)}\over(P-1)^3\)的值为:0.635166354758853(P≥5,为素数,趋于无穷大)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 18:38 | 显示全部楼层
这个网站很少有编程高手,至今也没有第二人在这里发表vfp方面的内容。
回复 支持 反对

使用道具 举报

发表于 2021-8-25 11:04 | 显示全部楼层
SELECT 1
USE D:\素数式系数\系数值.dbf ALIAS 系数
SELECT 2
USE D:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间

k=6  &&k=RECCOUNT()
SELECT 2
   GO 7
    s=1.0000000000000000
       FOR  i=1 TO 50876318  &&又遇到以前类似事情,外循环变量用了j与下面的内循环变量一致,所以提示0不能做除数。
        @ 5,12 say i
        SELECT 2
        p=素数
        jl=recno()
         s=s*p*(p-12)/(p-6)^2 && s=s*p^(k-1)*(p-k)/(p-1)^k
         SELECT 2
            GO jl+1
     ENDFOR
     SELECT 1
     APPEND BLANK     &&增加一条空记录
     REPLACE k生 WITH 12
     REPLACE 系数 WITH s

=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-27 06:34 | 显示全部楼层
SELECT 1
USE D:\VFP温习\L14二生素数表.DBF ALIAS 二生素数表
SELECT 2
USE D:\VFP温习\L14二生素数四.DBF ALIAS 二生素数四
SELECT 3
USE D:\vfp温习\L14四生素数统计表.DBF ALIAS 四生统计
kssj=SECONDS()
FOR m=101 TO 110
@ 15,22 say m
SELECT 2
DELETE ALL
PACK
SELECT  1
GO 1
    For i=1 TO  4110910-m &&这个位置一定把数值换成新表的记录条数
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=二生14中
    count next m+1 for 6*m=二生14中-A to js1
        IF js1=1
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二14四 WITH A+3*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>二14四 TO tj
              SELECT  3  &&打开盛放素数式的表
              APPEND BLANK     &&增加一条空记录
              REPLACE 范围 WITH fw
              REPLACE 跨度 WITH 6*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,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-27 06:35 | 显示全部楼层
SELECT 1
USE D:\VFP温习\L22二生素数表.DBF ALIAS 二生素数表
SELECT 2
USE D:\VFP温习\L22二生素数四.DBF ALIAS 二生素数四
SELECT 3
USE D:\vfp温习\L22四生素数统计表.DBF ALIAS 四生统计
kssj=SECONDS()
FOR m=18 TO 30
@ 15,22 say m
SELECT 2
DELETE ALL
PACK
SELECT  1
GO 1
    For i=1 TO  3807708-m &&这个位置一定把数值换成新表的记录条数
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=二生22中
    count next m+1 for 6*m=二生22中-A to js1
        IF js1=1
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二22四 WITH A+3*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>二22四 TO tj
              SELECT  3  &&打开盛放素数式的表
              APPEND BLANK     &&增加一条空记录
              REPLACE 范围 WITH fw
              REPLACE 跨度 WITH 6*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,"运行时间提示")
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 00:41 , Processed in 0.086966 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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