数学中国

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

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

  [复制链接]
 楼主| 发表于 2021-5-30 05:50 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式7.DBF ALIAS 素数式7
SELECT 2
USE D:\素数式裂解\素数式7横.DBF ALIAS 素数式7横
kssj=SECONDS()
    SELECT 1
    ss1=0
    ss7=42 &&改成本跨度数
    For i=1 to 15504 &&改成相应的记录条数即可
      ss2=素式7
      SKIP
      ss3=素式7
      SKIP
      ss4=素式7
      SKIP
      ss5=素式7
       SKIP
      ss6=素式7
       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值付给素数式
       SELECT 1
       skip
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
人不可貌相,海水不可斗量。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-30 05:55 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式6.DBF ALIAS 素数式6
SELECT 2
USE D:\素数式裂解\素数式6横.DBF ALIAS 素数式6横
kssj=SECONDS()
    SELECT 1
    ss1=0
    ss6=42
    For i=1 to 4845
      ss2=素式6
      SKIP
      ss3=素式6
      SKIP
      ss4=素式6
      SKIP
      ss5=素式6
       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值付给素数式
       SELECT 1
       skip
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
眨眼间即刻完成,弹指一瞬间。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-30 06:01 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式6横.DBF ALIAS 素数式6横 &&与需要处理的表名称相对应
SELECT 2
USE D:\素数式裂解\余数表.DBF ALIAS 余数表
SELECT 3
USE D:\素数式裂解\素数表.DBF ALIAS 素数表
SELECT 4
USE D:\素数式裂解\素数式12横42剩.DBF ALIAS 素数式12横剩
kssj=SECONDS()
  DIMENSION ss(6) &&改成本表字段数,即一条记录包含多少个字段
  SELECT 1
  For i=1 to 4845 &&改成本次处理表的记录条数
  @ 5,10 say i
    ss(1)=素1
    ss(2)=素2
    ss(3)=素3
    ss(4)=素4
    ss(5)=素5
    ss(6)=素6
     && ss(7)=素7
     && ss(8)=素8
     && ss(9)=素9
     && ss(10)=素10
     && ss(11)=素11
     && ss(12)=素12
       SELECT 3
       GO 1
       FOR j=1 TO 2 &&在12生素数式时,用到素数11,10生素数式用到素数7就可以了;素数式只用到3,5,连7也不用
       SELECT 3
       sss=素数
       SELECT 2
       DELETE ALL
       pack   &&下一步要用到余数表,所以清空它
           FOR k=1 TO 6 &&此循环值到k生素数式中的k值即可
           ys=MOD(ss(k),sss)
           && @ 15,20 say ss(k),不需要了,原先是想了解ss(k)是否随循环变量而改变,观察用
           SELECT 2
           count all for ys=余数 to js  &&改成余数表中的字段名
                   IF js=0
                   SELECT 2
                   APPEND BLANK
                   REPLACE 余数 WITH ys
                   ENDIF
           ENDFOR
           SELECT 2
           zjl=RECCOUNT()  &&把余数表中的记录条数赋给变量zjl
           IF zjl=sss
           EXIT
           ENDIF
           SELECT 3
           skip
       ENDFOR
       IF j>2  &&与参与素数的个数相关联
       SELECT  4  &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素1 WITH ss(1) &&将B值付给素数式
       REPLACE 素2 WITH ss(2) &&将B值付给素数式
       REPLACE 素3 WITH ss(3) &&将B值付给素数式
       REPLACE 素4 WITH ss(4) &&将B值付给素数式
       REPLACE 素5 WITH ss(5) &&将B值付给素数式
       REPLACE 素6 WITH ss(6) &&将B值付给素数式
        && REPLACE 素7 WITH ss(7) &&将B值付给素数式
        && REPLACE 素8 WITH ss(8) &&将B值付给素数式
        && REPLACE 素9 WITH ss(9) &&将B值付给素数式
        && REPLACE 素10 WITH ss(10) &&将B值付给素数式
        && REPLACE 素11 WITH ss(11) &&将B值付给素数式
        && REPLACE 素12 WITH ss(12) &&将B值付给素数式
       ENDIF
   SELECT 1
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
与7生素数式相比,变动多少大点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-30 06:03 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式5.DBF ALIAS 素数式5
SELECT 2
USE D:\素数式裂解\素数式5横.DBF ALIAS 素数式5横
kssj=SECONDS()
    SELECT 1
    ss1=0
    ss5=42
    For i=1 to 1140
      ss2=素式5
      SKIP
      ss3=素式5
      SKIP
      ss4=素式5
       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值付给素数式
       SELECT 1
       skip
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
细微的改变,也会影响世界。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-30 06:07 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式5横.DBF ALIAS 素数式5横 &&与需要处理的表名称相对应
SELECT 2
USE D:\素数式裂解\余数表.DBF ALIAS 余数表
SELECT 3
USE D:\素数式裂解\素数表.DBF ALIAS 素数表
SELECT 4
USE D:\素数式裂解\素数式12横42剩.DBF ALIAS 素数式12横剩
kssj=SECONDS()
  DIMENSION ss(5) &&改成本表字段数,即一条记录包含多少个字段
  SELECT 1
  For i=1 to 1140 &&改成本次处理表的记录条数
  @ 5,10 say i
    ss(1)=素1
    ss(2)=素2
    ss(3)=素3
    ss(4)=素4
    ss(5)=素5
     && ss(6)=素6
     && ss(7)=素7
     && ss(8)=素8
     && ss(9)=素9
     && ss(10)=素10
     && ss(11)=素11
     && ss(12)=素12
       SELECT 3
       GO 1
       FOR j=1 TO 2 &&在12生素数式时,用到素数11,10生素数式用到素数7就可以了;素数式只用到3,5,连7也不用
       SELECT 3
       sss=素数
       SELECT 2
       DELETE ALL
       pack   &&下一步要用到余数表,所以清空它
           FOR k=1 TO 5 &&此循环值到k生素数式中的k值即可
           ys=MOD(ss(k),sss)
           && @ 15,20 say ss(k),不需要了,原先是想了解ss(k)是否随循环变量而改变,观察用
           SELECT 2
           count all for ys=余数 to js  &&改成余数表中的字段名
                   IF js=0
                   SELECT 2
                   APPEND BLANK
                   REPLACE 余数 WITH ys
                   ENDIF
           ENDFOR
           SELECT 2
           zjl=RECCOUNT()  &&把余数表中的记录条数赋给变量zjl
           IF zjl=sss
           EXIT
           ENDIF
           SELECT 3
           skip
       ENDFOR
       IF j>2  &&与参与素数的个数相关联
       SELECT  4  &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素1 WITH ss(1) &&将B值付给素数式
       REPLACE 素2 WITH ss(2) &&将B值付给素数式
       REPLACE 素3 WITH ss(3) &&将B值付给素数式
       REPLACE 素4 WITH ss(4) &&将B值付给素数式
       REPLACE 素5 WITH ss(5) &&将B值付给素数式
        && REPLACE 素6 WITH ss(6) &&将B值付给素数式
        && REPLACE 素7 WITH ss(7) &&将B值付给素数式
        && REPLACE 素8 WITH ss(8) &&将B值付给素数式
        && REPLACE 素9 WITH ss(9) &&将B值付给素数式
        && REPLACE 素10 WITH ss(10) &&将B值付给素数式
        && REPLACE 素11 WITH ss(11) &&将B值付给素数式
        && REPLACE 素12 WITH ss(12) &&将B值付给素数式
       ENDIF
   SELECT 1
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-30 06:09 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式.DBF ALIAS 素数式
SELECT 2
USE D:\素数式裂解\素数式4横.DBF ALIAS 素数式4横
kssj=SECONDS()
    SELECT 1
    ss1=0
    ss4=42
    For i=1 to 190
      ss2=素式0
      SKIP
      ss3=素式0
       SELECT  2  &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素1 WITH ss1 &&将B值付给素数式
       REPLACE 素2 WITH ss2 &&将B值付给素数式
       REPLACE 素3 WITH ss3 &&将B值付给素数式
       REPLACE 素4 WITH ss4 &&将B值付给素数式
       SELECT 1
       skip
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-30 06:14 | 显示全部楼层
SELECT 1
USE D:\素数式裂解\素数式4横.DBF ALIAS 素数式4横 &&与需要处理的表名称相对应
SELECT 2
USE D:\素数式裂解\余数表.DBF ALIAS 余数表
SELECT 3
USE D:\素数式裂解\素数表.DBF ALIAS 素数表
SELECT 4
USE D:\素数式裂解\素数式12横42剩.DBF ALIAS 素数式12横剩
kssj=SECONDS()
  DIMENSION ss(4) &&改成本表字段数,即一条记录包含多少个字段
  SELECT 1
  For i=1 to 190 &&改成本次处理表的记录条数
  @ 5,10 say i
    ss(1)=素1
    ss(2)=素2
    ss(3)=素3
    ss(4)=素4
     && ss(5)=素5
     && ss(6)=素6
     && ss(7)=素7
     && ss(8)=素8
     && ss(9)=素9
     && ss(10)=素10
     && ss(11)=素11
     && ss(12)=素12
       SELECT 3
       GO 1
       FOR j=1 TO 1 &&在12生素数式时,用到素数11,10生素数式用到素数7就可以了;素数式只用到3,5,连7也不用
       SELECT 3
       sss=素数
       SELECT 2
       DELETE ALL
       pack   &&下一步要用到余数表,所以清空它
           FOR k=1 TO 4 &&此循环值到k生素数式中的k值即可
           ys=MOD(ss(k),sss)
           && @ 15,20 say ss(k),不需要了,原先是想了解ss(k)是否随循环变量而改变,观察用
           SELECT 2
           count all for ys=余数 to js  &&改成余数表中的字段名
                   IF js=0
                   SELECT 2
                   APPEND BLANK
                   REPLACE 余数 WITH ys
                   ENDIF
           ENDFOR
           SELECT 2
           zjl=RECCOUNT()  &&把余数表中的记录条数赋给变量zjl
           IF zjl=sss
           EXIT
           ENDIF
           SELECT 3
           skip
       ENDFOR
       IF j>1  &&与参与素数的个数相关联
       SELECT  4  &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素1 WITH ss(1) &&将B值付给素数式
       REPLACE 素2 WITH ss(2) &&将B值付给素数式
       REPLACE 素3 WITH ss(3) &&将B值付给素数式
       REPLACE 素4 WITH ss(4) &&将B值付给素数式
        && REPLACE 素5 WITH ss(5) &&将B值付给素数式
        && REPLACE 素6 WITH ss(6) &&将B值付给素数式
        && REPLACE 素7 WITH ss(7) &&将B值付给素数式
        && REPLACE 素8 WITH ss(8) &&将B值付给素数式
        && REPLACE 素9 WITH ss(9) &&将B值付给素数式
        && REPLACE 素10 WITH ss(10) &&将B值付给素数式
        && REPLACE 素11 WITH ss(11) &&将B值付给素数式
        && REPLACE 素12 WITH ss(12) &&将B值付给素数式
       ENDIF
   SELECT 1
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
纵横战场,尘土飞扬。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-31 17:14 | 显示全部楼层
人有多大胆,地有多大产。在vfp编程上也是一样,只有你想不到的,没有你做不到的。不敢想象,就没有创新,不能固定思维,按部就班,你把编程局限在你的认知中,永远无法晋级,我做过实验,vfp表最大容量记录条1.9亿多,这就限制了自己,无法完成更大的记录条,数据表,这时需要变通,除了单一记录条,还有字段不是,我们可以用数组来压缩记录条,这不,素数式至29的,它的素数式达1021870080个,10亿级别,怎么能放得下,所以我用了数组a(10),即10个字段,这样就可以压缩到1亿级别,就可以解决记录条不足,最高上限的限制,所以还是事在人为,有的人说了,表的总容量也受限制,那就用分身术,用多个表好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-31 18:51 | 显示全部楼层
SELECT 1
USE D:\二生素数分解\素数式23.DBF ALIAS 素数式23
SELECT 2
USE D:\二生素数分解\素数式29.DBF ALIAS 素数式29
kssj=SECONDS()
DIMENSION a(10)
    m=0
    For i=1 to 29
        SELECT 1
        GO 1
        FOR j=1 TO 36495360
          ss23=素式23
          pdz=ss23+(i-1)*223092870  && pdz是判断值的缩写(速写)
       IF MOD(pdz,29)=0 && 如果S被其中素数之一整除就跳过,什么也不做
       ELSE  &&否则执行第二步方案
       m=m+1
       @ 15,20 say m
              IF MOD(m,10)>0
              a(MOD(m,10))=pdz
                && @ 5,10 say a(MOD(m,10))  
              ELSE
              a(10)=pdz
              endif
         IF MOD(m,10)=0
         SELECT  2   &&打开盛放素数式的表
         APPEND BLANK     &&增加一条空记录
         REPLACE 素式1 WITH a(1) &&将B值付给素数式
         REPLACE 素式2 WITH a(2)&&将B值付给素数式
         REPLACE 素式3 WITH a(3)&&将B值付给素数式
         REPLACE 素式4 WITH a(4)&&将B值付给素数式
         REPLACE 素式5 WITH a(5)&&将B值付给素数式
         REPLACE 素式6 WITH a(6)&&将B值付给素数式
         REPLACE 素式7 WITH a(7)&&将B值付给素数式
         REPLACE 素式8 WITH a(8)&&将B值付给素数式
         REPLACE 素式9 WITH a(9)&&将B值付给素数式
         REPLACE 素式10 WITH a(10)&&将B值付给素数式
         ENDIF
       ENDIF
       SELECT 1
       SKIP
       endfor
   endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是用数组的一种尝试,虽然经过改动,能正常运行,也获得想要的结果,但是文件太大,已到达上限2G,停止了运行,所以还得改变方法,在获得二生相邻素数(P,P+42)上。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-31 22:51 | 显示全部楼层
SELECT 1
USE D:\二生素数分解\素数式23.DBF ALIAS 素数式23
SELECT 2
USE D:\二生素数分解\二生相邻素数式.DBF ALIAS 相邻素数式
kssj=SECONDS()
    m=0
    For i=1 to 2
        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,"运行时间提示")
在第一个周期内获得6组(与272有点不相符,不过检验正确,不知道是否丢了解)。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 01:32 , Processed in 0.087459 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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