数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-1-20 09:45 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数式至13.dbf ALIAS 素数式13
SELECT 2
USE D:\循环链条\素数a不余m.dbf ALIAS 素数a余1
kssj=SECONDS()                      &&取出开始时间
SELECT 1
GO 2
p=素13
   FOR  j=1 TO 5759
  q=素13
  L=q-p
          SELECT 2
          APPEND BLANK
          REPLACE 素a WITH L &&改成本次追加记录的字段
          SELECT 1
          skip
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-20 09:45 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数式至17.dbf ALIAS 素数式17
SELECT 2
USE D:\循环链条\素数a不余m.dbf ALIAS 素数a余1
kssj=SECONDS()                      &&取出开始时间
SELECT 1
GO 2
p=素17
   FOR  j=1 TO 92159
  q=素17
  L=q-p
          SELECT 2
          APPEND BLANK
          REPLACE 素a WITH L &&改成本次追加记录的字段
          SELECT 1
          skip
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-20 09:46 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数式至19.dbf ALIAS 素数式19
SELECT 2
USE D:\循环链条\素数a不余m.dbf ALIAS 素数a余1
kssj=SECONDS()                      &&取出开始时间
SELECT 1
GO 2
p=素19
   FOR  j=1 TO 1658879
  q=素19
  L=q-p
          SELECT 2
          APPEND BLANK
          REPLACE 素a WITH L &&改成本次追加记录的字段
          SELECT 1
          skip
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-20 09:53 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数a不余m.dbf ALIAS 素数a  &&比制作表的素数值小(即下表)        原表在条件为真时
SELECT 2
USE D:\循环链条\素数a余m参考.dbf ALIAS 素数a余数 &&比上边已筛除的素数值要大  在条件为假时参考表
SELECT 3
USE D:\循环链条\素数b不余m.dbf ALIAS 素数b  &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同   在条件为真时制造表,即新表
SELECT 4
USE D:\循环链条\素数b余m参考.dbf ALIAS 素数b余数 &&比上边已筛除的素数值要大         在条件为真时参考表
SELECT 5
USE D:\循环链条\素数表万.dbf ALIAS 素数表参 &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同
kssj=SECONDS()   &&取出开始时间
SELECT 5
GO 6 &&从素数13开始
FOR n=1 TO 120
ss=素数
@ 5,9 say ss
IF MOD(n,2)=1 &&条件为真时,由a表制作b表,a表用一个,b表用2个,a表,为1和2,1表为主;b表为3和4,3表为主表
SELECT 3
DELETE ALL
PACK
SELECT 4
DELETE ALL
pack
SELECT 1   
GO 1            
   FOR i=1 TO 3000 &&这个范围远远超过出现最后一个余数的记录条数
    A=素a &&改成表1的字段名
    jlz=RECNO()  &&记住指针所在位置
    SELECT 4
    jlzs2=RECCOUNT()  &&核对表2记录条总数
    IF jlzs2=ss &&改成将要制作参考表的素数值,即表2中的素数值
    exit
    ENDIF
    ys=MOD(A,ss) &&改成将要制作参考表的素数值,即表2中的素数值
    SELECT 4
           count all for ys=余数b to js  &&改成将要制作参考表的字段名,即表2中的字段名
           IF js=0
          SELECT 4
          APPEND BLANK
          REPLACE 余数b WITH ys &&改成本次追加记录的字段名,即表2的字段名
          REPLACE 记录值 WITH jlz
          ENDIF
          SELECT 1
          skip
   ENDFOR
   SELECT 4
   GO ss
   DELETE NEXT 1
   pack
SELECT 1
GO 1
   &&jlzs1=RECCOUNT()  核对表2记录条总数            
  DO WHILE NOT EOF() && FOR i=1 TO jlzs1  &&循环次数改成,SELECT 1 的总记录条数
    A=素a  &&设成表1的字段名
    ys=MOD(A,ss) &&对3表的素数求余数
    SELECT 4
           count all for ys=余数b to js
           IF js=1
          SELECT 3
          APPEND BLANK
          REPLACE 素b WITH A &&改成本次追加记录的字段
          ENDIF
          SELECT 1
          skip
   ENDDO
   
ELSE  &&条件为假时,由b表制作a表,b表用一个,a表用2个  (a表,为1和2,1表为主;b表为3和4,3表为主表)
SELECT 1
DELETE ALL
PACK
SELECT 2
DELETE ALL
pack

SELECT 3  
GO 1            
   FOR i=1 TO 3000 &&这个范围远远超过出现最后一个余数的记录条数
    A=素b &&改成表1的字段名
    jlz=RECNO()  &&记住指针所在位置
    SELECT 2
    jlzs2=RECCOUNT()  &&核对表2记录条总数
    IF jlzs2=ss &&改成将要制作参考表的素数值,即表2中的素数值
    exit
    ENDIF
    ys=MOD(A,ss) &&改成将要制作参考表的素数值,即表2中的素数值
    SELECT 2
           count all for ys=余数a to js  &&改成将要制作参考表的字段名,即表2中的字段名
           IF js=0
          SELECT 2
          APPEND BLANK
          REPLACE 余数a WITH ys &&改成本次追加记录的字段名,即表2的字段名
          REPLACE 记录值 WITH jlz
          ENDIF
          SELECT 3
          skip
   ENDFOR
   SELECT 2
   GO ss
   DELETE NEXT 1
   pack
SELECT 3
GO 1
   &&jlzs1=RECCOUNT()  核对表2记录条总数            
  DO WHILE NOT EOF() && FOR i=1 TO jlzs1  &&循环次数改成,SELECT 1 的总记录条数
    A=素b  &&设成表1的字段名
    ys=MOD(A,ss) &&对3表的素数求余数
    SELECT 2
           count all for ys=余数a to js
           IF js=1
          SELECT 1
          APPEND BLANK
          REPLACE 素a WITH A &&改成本次追加记录的字段
          ENDIF
          SELECT 3
          skip
   ENDDO
   ENDIF
   SELECT 5 && 外循环是选择素数表
   skip
   endfor
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
快速制作素数式链条(极速)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-20 12:25 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数式.dbf ALIAS 素数  &&比制作表的素数值小(即下表)        原表在条件为真时
SELECT 2
USE D:\循环链条\素数a余m参考.dbf ALIAS 素数a余数 &&比上边已筛除的素数值要大  在条件为假时参考表
SELECT 3
USE D:\循环链条\素数表万.dbf ALIAS 素数表参 &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同
SELECT 4
USE D:\循环链条\余数检索结果表.dbf ALIAS 检索结果 &&即将筛除素数余数的盛放表,与上表(参考表)素数值相同
kssj=SECONDS()   &&取出开始时间
SELECT 3
GO 1 &&从素数13开始
FOR n=1 TO 608
ss=素数
@ 5,9 say ss
SELECT 2
DELETE ALL
PACK
  SELECT 1
  GO 1
FOR m=1 TO 4487
sm=素m
ys=MOD(sm,ss)
SELECT 2
  count all for ys=余数a to js  &&改成将要制作参考表的字段名,即表2中的字段名
          IF js=0
          SELECT 2
          APPEND BLANK
          REPLACE 余数a WITH ys &&改成本次追加记录的字段名,即表2的字段名
          ENDIF
          SELECT 1
          SKIP
ENDFOR
SELECT 2
jl=RECCOUNT()
SELECT 4
APPEND BLANK
REPLACE 素数 WITH ss
REPLACE 余数种类 WITH jl
SELECT 3
SKIP
Endfor
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
余数检索结果。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-20 17:05 | 显示全部楼层
我经常看到网上谈到算法,不知算法的概念,我每天都在编写一些小程序来解决我想到的素数问题。在学习中前进,在解决素数问题中学习。学,用两不误。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 10:23 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数百.dbf ALIAS 素百
kssj=SECONDS()                      &&取出开始时间
   FOR  j=1 TO 99  STEP 2
   n=j
      IF MOD(n,3)=0 OR MOD(n,5)=0 OR MOD(n,7)=0
          else
          SELECT 1
          APPEND BLANK
          REPLACE 素数 WITH n &&改成本次追加记录的字段
     endif
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
制作百内素数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 10:24 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数百.dbf ALIAS 素百
SELECT 2
USE D:\循环链条\素数万.dbf ALIAS 素万
kssj=SECONDS()                      &&取出开始时间
   FOR  i=101 TO 9999  STEP 2
   n=i
    SELECT 1
    GO 1
    FOR j=1  TO  24
     ss=素数
      IF MOD(n,ss)=0
         exit
          ELSE
          SELECT 1
          SKIP
       ENDIF
    ENDFOR
       IF j>24
          SELECT 2
          APPEND BLANK
          REPLACE 素数 WITH n &&改成本次追加记录的字段
      endif
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
利用百内素数制作万内素数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 10:51 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数式至11.dbf ALIAS 素式11
kssj=SECONDS()                      &&取出开始时间
   FOR  j=1 TO 2309  STEP 2
   n=j
      IF MOD(n,3)=0 OR MOD(n,5)=0 OR MOD(n,7)=0 OR MOD(n,11)=0
          else
          SELECT 1
          APPEND BLANK
          REPLACE 素11 WITH n &&改成本次追加记录的字段
      endif
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
SELECT 1
USE D:\循环链条\素数式至13.dbf ALIAS 素式13
kssj=SECONDS()                      &&取出开始时间
   FOR  j=1 TO 30029  STEP 2
   n=j
      IF MOD(n,3)=0 OR MOD(n,5)=0 OR MOD(n,7)=0 OR MOD(n,11)=0 OR MOD(n,13)=0
          else
          SELECT 1
          APPEND BLANK
          REPLACE 素13 WITH n &&改成本次追加记录的字段
      endif
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
SELECT 1
USE D:\循环链条\素数式至17.dbf ALIAS 素式17
kssj=SECONDS()                      &&取出开始时间
   FOR  j=1 TO 510509  STEP 2
   n=j
      IF MOD(n,3)=0 OR MOD(n,5)=0 OR MOD(n,7)=0 OR MOD(n,11)=0 OR MOD(n,13)=0 OR MOD(n,17)=0
          else
          SELECT 1
          APPEND BLANK
          REPLACE 素17 WITH n &&改成本次追加记录的字段
      endif
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
SELECT 1
USE D:\循环链条\素数式至19.dbf ALIAS 素式19
kssj=SECONDS()                      &&取出开始时间
   FOR  j=1 TO 9699689  STEP 2
   n=j
      IF MOD(n,3)=0 OR MOD(n,5)=0 OR MOD(n,7)=0 OR MOD(n,11)=0 OR MOD(n,13)=0 OR MOD(n,17)=0 OR MOD(n,19)=0
          else
          SELECT 1
          APPEND BLANK
          REPLACE 素19 WITH n &&改成本次追加记录的字段
      endif
   ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是从制作素数式至11到制作素数式至19的四个小程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 16:49 | 显示全部楼层
SELECT 1
USE D:\循环链条\素数表双万.DBF ALIAS 素数表
SELECT 2
USE D:\循环链条\素数亿.DBF ALIAS 素数表亿
SELECT 3
USE D:\循环链条\素数式至19.DBF ALIAS 生成元
kssj=SECONDS()
    For N=2 to 10
    @ 5,12 say N
        SELECT 3
        go 1
        for m=1 to 1658880
        bpz=素19+(N-1)*9699690
        Kf=INT(SQRT(bpz))       &&求出奇数的开方根
        SELECT  1             &&打开素数表
        LOCATE FOR 素数>=kf      &&根据开方根,查找最大素数
        DO CASE
                CASE EOF()          &&如果超出素数表最后一条记录
                        GO BOTTOM
                CASE 素数>kf     &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
                        SKIP -1
        ENDCASE
        SSS=RECNO()    &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
        GO 8           &&从第一条记录开始读取素数(3)
        FOR j=1 TO SSS-7       &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
                qmz=MOD(bpz,素数)   &&以读取的素数为条件,对被判断值求模 【qmz=MOD(bpz,素数)】文本号括着的原在此行语句体部分.特别需要注意的是在用标点符号时,一定改成英文模式及半角状态。
                IF qmz=0
                        EXIT         
                ENDIF
                SKIP            &&素数表指针向下移动一个
        ENDFOR
        IF j>sss-7
                SELECT  2      &&打开盛放素数的表
                APPEND BLANK                        &&增加一条空记录
                REPLACE 素数 WITH bpz            &&将N值付给素数
        ENDIF
        SELECT 3
        skip
        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-15 08:56 , Processed in 0.110509 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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