数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-6-1 07:15 | 显示全部楼层
白新岭 发表于 2021-5-31 22:51
SELECT 1
USE D:\二生素数分解\素数式23.DBF ALIAS 素数式23
SELECT 2

上楼的程序有点小问题,就是最外层循环在未开始前程序就结束了,记录超出范围。多少变动了一下,在素数式至23中增了3条记录(2条就够了),以衔接起来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-1 09:11 | 显示全部楼层
刚才想到了一个问题,可以把跨度为特定值的素数式当做生成元,用筛选素数的方法单独筛选二生相邻素数对。这样可以避免数据大,vfp容量不足等问题(vfp表最大容量2G)。在这种思路的指引下,对于公式的验证会上升到另一个层面,精度的发展趋势。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-1 16:52 | 显示全部楼层
SELECT 1
USE D:\二生素数分解\素数式23.DBF ALIAS 素数式23
SELECT 2
USE D:\二生素数分解\二生相邻素数式.DBF ALIAS 相邻素数式
kssj=SECONDS()
    m=70473797
    For i=3 to 29
     @ 5,10 say  i
        SELECT 1
        GO 1
        FOR j=1 TO 36495360
          ss23=素式23
          jlh=RECNO()
          pdz=ss23+(i-1)*223092870  && pdz是判断值的缩写(速写)
       IF MOD(pdz,29)=0 && 如果S被其中素数之一整除就跳过,什么也不做
       ELSE  &&否则执行第二步方案
        m=m+1
         @ 15,20 say m
         ss1=pdz
         SELECT 1
         GO jlh+1
         FOR h=1 TO 2
         ss2=素式23
         pdz2=ss2+(i-1)*223092870  && pdz是判断值的缩写(速写)
         IF MOD(pdz2,29)=0
         SELECT 1
         GO jlh+2
         ELSE
         kd=pdz2-ss1
         EXIT
         ENDIF
         ENDFOR
         IF kd=42
         SELECT  2   &&打开盛放素数式的表
         APPEND BLANK     &&增加一条空记录
         REPLACE 序号 WITH m &&将B值付给素数式
         REPLACE 跨度 WITH 42 &&将B值付给素数式
         REPLACE 素数式 WITH ss1 &&将B值付给素数式
         ENDIF
       endif
       SELECT 1
       GO jlh+1
       endfor
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这个程序运行了612分3.63秒(27个周期,前两个周期没有留下记录)。
运算结果正确,是272个记录条。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 19:00 | 显示全部楼层
什么问题能不能解决,试了才知道,不要提前把自己的道路给封死了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-12 14:53 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿整理
SELECT 2
USE D:\VFP温习\二生素数14.DBF ALIAS 二生素数表
kssj=SECONDS()
For i=1 to 50876320
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    cj=B-A  && 差距
    IF cj=10
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二素14 WITH A         &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是从素数表中筛选二生相邻素数(P,P+10)的程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-12 14:57 | 显示全部楼层
或许轻轻一改变,就可以获得三生相邻素数(P,P+10)(中间还有一个素数),方法就是向下移动2次鼠标,看其间距是否为10即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-12 15:47 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿整理
SELECT 2
USE D:\VFP温习\二生素数14.DBF ALIAS 二生素数表
kssj=SECONDS()
For i=1 to 50876320
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 2
    PUBLIC B
    B=素数
    cj=B-A  && 差距
    IF cj=10
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二素14 WITH A         &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是从素数表中筛选三生相邻素数(P,P+10)的程序,即在P,和P+10之间还有一个素数(两种情况)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-14 10:20 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表万.DBF ALIAS 素数表万
SELECT 2
USE D:\VFP温习\歌猜数类列表.DBF ALIAS 歌数列表
kssj=SECONDS()
  ys0=0
  ys1=0
  ys2=0
For i=1 to 1228
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
        For j=1 to 1229-i
        SELECT  1
        jl1=recno()
        PUBLIC B
        B=素数
        ys=MOD(A+B,3)  && 差距
           IF ys=0
              ys0=ys0+1
              ELSE &&刚开始没有此语句,仅统计了ys0的,其他两种情况为0
              IF ys=1
                 ys1=ys1+1
                 ELSE  &&刚开始没有此语句,仅统计了ys0的,其他两种情况为0
                 IF ys=2
                    ys2=ys2+1
                 ENDIF
              ENDIF
            ENDIF
        SELECT  1
        GO jl1+1
        ENDFOR
    SELECT  1
    GO jl+1
    ENDFOR
   
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 余数 WITH 0       &&将N值付给素数式
         REPLACE 统计 WITH ys0
         APPEND BLANK     &&增加一条空记录
         REPLACE 余数 WITH 1       &&将N值付给素数式
         REPLACE 统计 WITH ys1
         APPEND BLANK     &&增加一条空记录
         REPLACE 余数 WITH 2       &&将N值付给素数式
         REPLACE 统计 WITH ys2
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
统计不同余数的素数组(偶数歌猜数,安类别划分)
回复 支持 反对

使用道具 举报

发表于 2021-6-14 11:23 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿整理
SELECT 2
USE D:\VFP温习\歌猜数类列表.DBF ALIAS 歌数列表
kssj=SECONDS()
  ys0=0
  ys1=0
  ys2=0
  ys3=0
  ys4=0
  SELECT  1
  GO 4
For i=1 to 9591
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
        For j=1 to 9592-i
        SELECT  1
        jl1=recno()
        PUBLIC B
        B=素数
        ys=MOD(A+B,5)  && 差距
           IF ys=0
              ys0=ys0+1
              ELSE &&刚开始没有此语句,仅统计了ys0的,其他两种情况为0
              IF ys=1
                 ys1=ys1+1
                 ELSE  &&刚开始没有此语句,仅统计了ys0的,其他两种情况为0
                 IF ys=2
                    ys2=ys2+1
                    ELSE
                    IF ys=3
                       ys3=ys3+1
                       ELSE
                       IF ys=4
                          ys4=ys4+1
                       ENDIF
                    ENDIF
                 ENDIF
              ENDIF
            ENDIF
        SELECT  1
        GO jl1+1
        ENDFOR
    SELECT  1
    GO jl+1
    ENDFOR
   
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 余数 WITH 0       &&将N值付给素数式
         REPLACE 统计 WITH ys0
         APPEND BLANK     &&增加一条空记录
         REPLACE 余数 WITH 1       &&将N值付给素数式
         REPLACE 统计 WITH ys1
         APPEND BLANK     &&增加一条空记录
         REPLACE 余数 WITH 2       &&将N值付给素数式
         REPLACE 统计 WITH ys2
         APPEND BLANK     &&增加一条空记录 先头缺少这个语句,结果没有输出2,而是输出3的,即被改写了
         REPLACE 余数 WITH 3       &&将N值付给素数式
         REPLACE 统计 WITH ys3
         APPEND BLANK     &&增加一条空记录
         REPLACE 余数 WITH 4       &&将N值付给素数式
         REPLACE 统计 WITH ys4
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是安素数5分类统计
回复 支持 反对

使用道具 举报

发表于 2021-6-14 17:55 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿整理
SELECT 2
USE D:\VFP温习\L6三生素数24表新.DBF ALIAS 三生素数表
kssj=SECONDS()
For i=1 to 5875530
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    SKIP 1
    PUBLIC B
    B=素数
    SKIP 1
    PUBLIC C
    C=素数
    cj1=B-A  &&求前后两个素数的差值
    cj2=C-B  &&求前后两个素数的差值
    IF cj1=2 AND cj2=4
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 三中24 WITH A+3          &&将N值付给素数式
    ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
从素数表中筛选三生素数24
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-20 14:23 , Processed in 0.098333 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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