数学中国

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

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

  [复制链接]
 楼主| 发表于 2020-11-23 19:32 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式79.dbf ALIAS 素数79
SELECT 2
USE D:\vfp寻找素数式\素数式43.dbf ALIAS 素数43
kssj=SECONDS()                      &&取出开始时间
SELECT 2
go top
   FOR  j=1 to 127802648
  y=式43
        IF mod(y,47)=46 OR  mod(y,53)=52 OR  mod(y,59)=58 OR mod(y,61)=60 OR mod(y,67)=66 or mod(y,71)=70 OR  mod(y,73)=72 OR  mod(y,79)=78
          ELSE
          SELECT 1
          APPEND BLANK
          REPLACE 式79 WITH y &&改成本次追加记录的字段
          ENDIF
          SELECT 2
          SKIP
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是进一步筛选素数式的程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-24 09:50 | 显示全部楼层
我在2020年11月23日至24日间制作完成了30030*30030=901800900跨度范围内的素数式,并且通过了500以前的素数检测,所以在两个素数式的差值在1000以内没有假冒素数式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 10:05 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式499.dbf ALIAS 素数499
kssj=SECONDS()                      &&取出开始时间
SELECT 1
go top
  PUBLIC A
  A=式499
  skip
  PUBLIC B
  B=式499
  C=B-A
  E=C
  F=C
  FOR i=1 TO 80935337
       PUBLIC D
       D=式499
       j=RECNO() &&返回 记录号
       skip
       PUBLIC H
       H=式499
       G=H-D
              IF E<G
                E=G
              ENDIF
              IF F>G
                F=G
            endif
          SELECT 1
          GO j+1
   ENDFOR
   ?"最大数是",E
   ?"最小数是",F
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是求30030*30030之内通过500前素数检测的素数式的邻差最大值和最小值程序(结算结果:小值是2,大值是502)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 15:43 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式23.dbf ALIAS 素数23
kssj=SECONDS()                      &&取出开始时间
   FOR  j=1 TO 111546435
  y=2*(j-1)
        IF mod(y,3)=2 OR  mod(y,5)=4 OR  mod(y,7)=6 OR mod(y,11)=10 OR mod(y,13)=12 or mod(y,17)=16 OR  mod(y,19)=18 OR  mod(y,23)=22
          ELSE
          SELECT 1
          APPEND BLANK
          REPLACE 式23 WITH y &&改成本次追加记录的字段
          ENDIF
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 16:34 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式23.dbf ALIAS 素23
SELECT 2
USE D:\vfp寻找素数式\相同间距素数式.dbf ALIAS 同距式
kssj=SECONDS() &&取出开始时间
FOR I=1 TO 18250000
@ 5,12 say I
    SELECT 1
    A=式23
    jl=RECNO() &&返回 记录号
         FOR J=1 TO 5
         SELECT 1
         SKIP
         B=式23
         C=B-A
         IF C>10
         EXIT
         ENDIF
         IF C=10
          SELECT 2
          APPEND BLANK
          REPLACE 开头式值 WITH A
          REPLACE 开头记录 WITH jl
          REPLACE 跨过记录 WITH J
          ENDIF
      endfor
           SELECT 1
           GO jl+1
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是在过29前素数的素数式中查找素数式差为10的,并且记录。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 17:48 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式19.dbf ALIAS 素19
SELECT 2
USE D:\vfp寻找素数式\相同间距素数式19.dbf ALIAS 同距式19
kssj=SECONDS() &&取出开始时间
FOR I=1 TO 830000
@ 5,12 say I
    SELECT 1
    A=式19
    jl=RECNO() &&返回 记录号
         FOR J=1 TO 35
         SELECT 1
         SKIP
         B=式19
         C=B-A
         IF C>100
         EXIT
         ENDIF
         IF C=100
          SELECT 2
          APPEND BLANK
          REPLACE 开头式值 WITH A
          REPLACE 开头记录 WITH jl
          REPLACE 跨过记录 WITH J
          ENDIF
      endfor
           SELECT 1
           GO jl+1
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 17:49 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\相同间距素数式19.dbf ALIAS 素数19
kssj=SECONDS()                      &&取出开始时间
SELECT 1
go top
  PUBLIC A
  A=跨过记录
  E=A
  F=A
  FOR i=1 TO 252620
       PUBLIC D
       D=跨过记录
       j=RECNO() &&返回 记录号
              IF E<D
                E=D
              ENDIF
              IF F>D
                F=D
            endif
          SELECT 1
          GO j+1
   ENDFOR
   ?"跨过记录最大",E
   ?"跨过记录最小",F
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 10:36 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式19.dbf ALIAS 素19
SELECT 2
USE D:\vfp寻找素数式\相同间距素数式19.dbf ALIAS 同距式19
SELECT 3
USE D:\vfp寻找素数式\相同间距素数式类型.dbf ALIAS 素数式类型
kssj=SECONDS() &&取出开始时间
FOR I=1 TO 252620
@ 5,12 say I
    SELECT 2
    A=跨过记录
    B=开头记录
    H=开头式值
    IF A=23
    SELECT 1
    GO B
      C=式19
      S=0
         FOR J=1 TO 23
         SELECT 1
         SKIP
         D=式19
         E=D-C
         S=S+E
           SELECT 1
           SKIP
         endfor
          SELECT 3
          APPEND BLANK
          REPLACE 开头式值 WITH H
          REPLACE 开头记录 WITH B
          REPLACE 跨过记录 WITH A
          REPLACE 二次累计和 WITH S
     ENDIF
     SELECT 2
     skip
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是计算相同间距的素数式不同类型,从二次求和累计值判断不同类型。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 11:41 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式19.dbf ALIAS 素19
SELECT 2
USE D:\vfp寻找素数式\相同间距素数式类型.dbf ALIAS 素式类型
SELECT 3
USE D:\vfp寻找素数式\最密k生素数式.dbf ALIAS k素式
kssj=SECONDS() &&取出开始时间
FOR I=1 TO 5
@ 5,12 say I
    SELECT 2
    B=开头记录
          FOR J=1 TO 24
          SELECT 1
          GO B
          C=式19
          SELECT 3
          APPEND BLANK
          REPLACE 密式k WITH C
          SELECT 1
          SKIP
          ENDFOR
       SELECT 2
       SKIP
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2)
导出符合条件的素数式(流程图:先制造出符合条件的素数式的起始位置(所在位置记录值是多少),建一个新表盛放最密k生素数式,预先已有至19的素数式)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 12:00 | 显示全部楼层
SELECT 1
USE D:\vfp寻找素数式\素数式19.dbf ALIAS 素19
SELECT 2
USE D:\vfp寻找素数式\相同间距素数式类型.dbf ALIAS 素式类型
SELECT 3
USE D:\vfp寻找素数式\最密k生素数式.dbf ALIAS k素式
kssj=SECONDS() &&取出开始时间
FOR I=1 TO 5
@ 5,12 say I
    SELECT 2
    B=开头记录
         SELECT 1
          GO B
          FOR J=1 TO 24
          C=式19
          SELECT 3
          APPEND BLANK
          REPLACE 密式k WITH C
          SELECT 1
          SKIP
          ENDFOR
       SELECT 2
       SKIP
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
上楼错误,本楼稍微改动,程序语言未多也未少,只是调了下位置(或者说前后顺序),输出结果才正确。问什么?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 20:41 , Processed in 0.059570 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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