数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-5-12 18:39 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式8.DBF ALIAS 素数式8
SELECT 2
USE D:\素数式裂解\素数式8横.DBF ALIAS 素数式8横
kssj=SECONDS()
    SELECT 1
    ss1=0
    ss8=30
    For i=1 to 3003
      ss2=素式8
      SKIP
      ss3=素式8
      SKIP
      ss4=素式8
      SKIP
      ss5=素式8
       SKIP
      ss6=素式8
      skip
      ss7=素式8
       SELECT  2  &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素1 WITH ss1 &&将B值付给素数式
       REPLACE 素2 WITH ss2 &&将B值付给素数式
       REPLACE 素3 WITH ss3 &&将B值付给素数式
       REPLACE 素4 WITH ss4 &&将B值付给素数式
       REPLACE 素5 WITH ss5 &&将B值付给素数式
       REPLACE 素6 WITH ss6 &&将B值付给素数式
       REPLACE 素7 WITH ss7 &&将B值付给素数式
       REPLACE 素8 WITH ss8 &&将B值付给素数式
       SELECT 1
       skip
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
最后一层不在发了。大家应该能看出规律。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 09:48 | 显示全部楼层
SELECT 1
USE D:\二生素数分解\素数式19.DBF ALIAS 素数式19
SELECT 2
USE D:\二生素数分解\素数式30.DBF ALIAS 素数式30
kssj=SECONDS()
For i=1 to 1658879
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素式19
    SKIP 1
    PUBLIC B
    B=素式19
    cj=B-A  && 差距
    IF cj=30
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 素式30 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,"运行时间提示")
在至19的素数式中筛选出20个素数式满足条件,但是在Excel中计算出来是0个。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 10:27 | 显示全部楼层
SELECT 1
USE D:\二生素数分解\素数式23.DBF ALIAS 素数式23
SELECT 2
USE D:\二生素数分解\素数式30.DBF ALIAS 素数式30
kssj=SECONDS()
For i=1 to 36495359
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素式23
    SKIP 1
    PUBLIC B
    B=素式23
    cj=B-A  && 差距
    IF cj=30
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 素式30 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,"运行时间提示")
这个计算出来2164个(上边在19时20个)与Excel的1056比起来要多。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 10:27 | 显示全部楼层
问题出在那里?

点评

问题出在二个周期以后的素数式上,只是想当然的把22与26考虑进去了,实际上大于20到30之间5个素数式都与11和13的剩余类有关联。  发表于 2021-5-15 07:09
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 15:46 | 显示全部楼层
CLEAR
SELECT 1
USE D:\vfp温习\素数式至17表.DBF ALIAS 素数式表
SELECT 2
USE D:\vfp温习\素数表万3.DBF ALIAS 素数表万3
SELECT 3
USE D:\vfp温习\素数表亿新.DBF ALIAS 素数表亿新
*INPUT "请输入预先值 K= " TO yxk
*INPUT "请输入步长值 bcz= " TO bcz
*INPUT "请输入初始值 csz= " TO csz
*INPUT "请输入外循环起始值 xks= " TO xks
*INPUT "请输入外循环终结值 zds= " TO zds
bcz=510510  &&从2乘到17,即素数17的素数阶乘
kssj=SECONDS()                      &&取出开始时间
FOR i=851 TO 900
@12,10 SAY i
            &&调了下顺序,原来在FOR j=1 TO 92160 的下边,执行第一个外循环,提示已经到了表尾
FOR j=1 TO 92160
SELECT 1
GO j
sss=素数式
bpz=sss+(i-1)*bcz               &&计算被判断值
Kf=INT(SQRT(bpz))                   &&求出被判断值的开方根
SELECT 2
GO 1
COUNT ALL FOR 素数<=kf TO jlh  &&借用原来的记录号,实际上统计kf以前的素数个数
  && jlh=RECNO()
SELECT 2   
GO 7                                &&从第二条记录开始读取素数(3)
FOR k=1 TO jlh-6                     &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
qmz=MOD(bpz,素数)                   &&以读取的素数为条件,对被判断值求模
IF qmz=0 && OR qmz=2 OR qmz=6 OR qmz=8  如果符合这四个约定条件之一,就进行相应工作.如果一个也没有符合条件的,直接使记录指针向下移动一个(SKIP)
EXIT                                &&因为符合条件,则做完相应工作后跳出内循环
ENDIF
SKIP                                &&素数表指针向下移动一个
ENDFOR
IF k>jlh-6
SELECT 3               &&打开保存求解结果的信息表
APPEND BLANK                        &&增加一条空记录
REPLACE 素数 WITH bpz && 把bpz赋给素数        
ENDIF
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是制作最密4生素数改写的程序。在筛选到那个素数上略微变动,用了统计函数取代。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-14 21:46 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式10.DBF ALIAS 素数式10
kssj=SECONDS()
    For i=1 to 8
      FOR j=i+1  TO 9
         FOR h=j+1  TO 10
         FOR k=h+1  TO 11
         FOR m=k+1  TO 12
          FOR g=m+1  TO 13
          FOR l=g+1  TO 14
          FOR u=l+1  TO 15
          ss1=2*i
          ss2=2*j
          ss3=2*h
          ss4=2*k
          ss5=2*m
          ss6=2*g
          ss7=2*l
          ss8=2*u
          SELECT  1   &&打开盛放素数式的表
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss1 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss2 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss3 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss4 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss5 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss6 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss7 &&将B值付给素数式
          APPEND BLANK     &&增加一条空记录
          REPLACE 素式10 WITH ss8 &&将B值付给素数式
          ENDFOR
          ENDFOR
          ENDFOR
          ENDFOR
          ENDFOR
         ENDFOR
      endfor
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
为了获得二生相邻素数(P,P+32)的数量公式,特意增加本程序。
回复 支持 反对

使用道具 举报

发表于 2021-5-15 07:45 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式10.DBF ALIAS 素数式10
SELECT 2
USE D:\素数式裂解\素数式10横.DBF ALIAS 素数式10横
kssj=SECONDS()
    SELECT 1
    ss1=0
    ss10=32
    For i=1 to 6435
      ss2=素式10
      SKIP
      ss3=素式10
      SKIP
      ss4=素式10
      SKIP
      ss5=素式10
       SKIP
      ss6=素式10
      skip
      ss7=素式10
       skip
      ss8=素式10
      skip
      ss9=素式10
       SELECT  2  &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素1 WITH ss1 &&将B值付给素数式
       REPLACE 素2 WITH ss2 &&将B值付给素数式
       REPLACE 素3 WITH ss3 &&将B值付给素数式
       REPLACE 素4 WITH ss4 &&将B值付给素数式
       REPLACE 素5 WITH ss5 &&将B值付给素数式
       REPLACE 素6 WITH ss6 &&将B值付给素数式
       REPLACE 素7 WITH ss7 &&将B值付给素数式
       REPLACE 素8 WITH ss8 &&将B值付给素数式
       REPLACE 素9 WITH ss9 &&将B值付给素数式
       REPLACE 素10 WITH ss10 &&将B值付给素数式
       SELECT 1
       skip
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
因为跨度32的素数式涉及到10生素数,所以有晋升了点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-20 10:30 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表亿整理.DBF ALIAS 素数表亿整理
kssj=SECONDS()
SELECT  1
GO 2
j=1
For i=1 to 10000000
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    j=j*(1-(-1)^((A-1)/2)/(A-1))
      SELECT 1
      skip
   ENDFOR
   ?j
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
计算n^2+1型素数的数量公式前的系数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-21 16:29 | 显示全部楼层
SELECT 1
USE D:\素数式系数\素数式.dbf ALIAS 素数式
SELECT 2
USE D:\素数式系数\余数表.dbf ALIAS 余数表
SELECT 3
USE D:\素数式系数\素数表十亿.dbf ALIAS 素数表
kssj=SECONDS()  &&取出开始时间
SELECT 1
  k=RECCOUNT()
  go bottom
  max=素式
SELECT 3
   GO 1
    s=1
       FOR  j=1 TO 10000000
        SELECT 3
        p=素数
        IF p<=max
           SELECT 2
           DELETE all
            PACK
          SELECT 1
            go 1
           for j=1 to k
           sss=素式
           ys=mod(sss,p)
           SELECT 2
           count all for ys=余数 to js
                    IF js=0
                    SELECT 2
                    APPEND BLANK
                     REPLACE 余数 WITH ys &&改成本次追加记录的字段
                     ENDIF
                SELECT 1
                skip
              endfor
              SELECT 2
               jl=RECCOUNT()
               s=s*p^(k-1)*(p-jl)/(p-1)^k
              
        else
        
        s=s*p^(k-1)*(p-k)/(p-1)^k
        endif
         SELECT 3
               skip
endfor
?s
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
&&计算k生素数的系数程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-21 21:49 | 显示全部楼层
已经有了11个年头。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 12:36 , Processed in 0.097096 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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