标题:优化程序或者从新编写求四生素数中项不能合成的偶数
只看楼主
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
SELECT 1
USE f:\等差四生素数\素数表.DBF ALIAS 素数表
SELECT 2
USE f:\等差四生素数\二生d210.DBF ALIAS 二生素数表
kssj=SECONDS()
 For i=1 to 50876200
      @ 5,12 say i
    SELECT  1     
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 48
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=210
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二素 WITH A+210     
         REPLACE 记录2 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 1
   GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")

素数问题的解决是我学习编程永恒的动力。
2021-11-10 15:58
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
SELECT 1
USE f:\等差四生素数\素数表.DBF ALIAS 素数表
SELECT 2
USE f:\等差四生素数\二生d210.DBF ALIAS 二生素数表
SELECT 3
USE f:\等差四生素数\三生d210.DBF ALIAS 三生素数表
kssj=SECONDS()
 For i=1 to 10964187
      @ 5,12 say i
     SELECT 2
     jl2=记录2
    SELECT  1
    GO jl2   
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 48
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=210
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 三素 WITH A+210      
         REPLACE 记录3 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")

素数问题的解决是我学习编程永恒的动力。
2021-11-10 15:58
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
SELECT 1
USE f:\等差四生素数\素数表.DBF ALIAS 素数表
SELECT 2
USE f:\等差四生素数\三生d210.DBF ALIAS 三生素数表
SELECT 3
USE f:\等差四生素数\四生d210.DBF ALIAS 四生素数表
kssj=SECONDS()
 For i=1 to 2277441
      @ 5,12 say i
     SELECT 2
     jl3=记录3
    SELECT  1
    GO jl3   
    jl=recno() &&记录指针位置
    PUBLIC A
    A=素数
    skip
    FOR j=1 TO 48
       n=j
    SELECT 1
    PUBLIC B
    B=素数
    cj=B-A
    IF cj=210
         SELECT 3
         APPEND BLANK     &&增加一条空记录
         REPLACE 四素 WITH A+210      
         REPLACE 记录4 WITH jl+n
         exit
    ENDIF
      SELECT 1
      skip
   ENDFOR
   SELECT 2
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")

素数问题的解决是我学习编程永恒的动力。
2021-11-10 15:59
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
总区段    统计
103    18
104    0
105    0
106    0
107    0
108    0
109    0
110    0
111    0
112    0
113    0
114    0
115    0
116    0
117    0
118    0
119    0
120    0
第七大段最终结果(无解分布情况)

素数问题的解决是我学习编程永恒的动力。
2021-11-10 19:57
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
SELECT 239
USE G:\三角递增法\无偶数表总表.DBF ALIAS 无偶数总表
SELECT 136
USE G:\三角递增法\偶数周期表136.DBF ALIAS 偶周期136
SELECT 137
USE G:\三角递增法\偶数周期表137.DBF ALIAS 偶周期137
SELECT 138
USE G:\三角递增法\偶数周期表138.DBF ALIAS 偶周期138
SELECT 139
USE G:\三角递增法\偶数周期表139.DBF ALIAS 偶周期139
SELECT 140
USE G:\三角递增法\偶数周期表140.DBF ALIAS 偶周期140
SELECT 141
USE G:\三角递增法\偶数周期表141.DBF ALIAS 偶周期141
SELECT 142
USE G:\三角递增法\偶数周期表142.DBF ALIAS 偶周期142
SELECT 143
USE G:\三角递增法\偶数周期表143.DBF ALIAS 偶周期143
SELECT 144
USE G:\三角递增法\偶数周期表144.DBF ALIAS 偶周期144
SELECT 145
USE G:\三角递增法\偶数周期表145.DBF ALIAS 偶周期145
SELECT 146
USE G:\三角递增法\偶数周期表146.DBF ALIAS 偶周期146
SELECT 147
USE G:\三角递增法\偶数周期表147.DBF ALIAS 偶周期147
SELECT 148
USE G:\三角递增法\偶数周期表148.DBF ALIAS 偶周期148
SELECT 149
USE G:\三角递增法\偶数周期表149.DBF ALIAS 偶周期149
SELECT 150
USE G:\三角递增法\偶数周期表150.DBF ALIAS 偶周期150
SELECT 151
USE G:\三角递增法\偶数周期表151.DBF ALIAS 偶周期151
SELECT 152
USE G:\三角递增法\偶数周期表152.DBF ALIAS 偶周期152
SELECT 153
USE G:\三角递增法\偶数周期表153.DBF ALIAS 偶周期153
kssj=SECONDS()
bwjm="偶周期"
For j=136 to 153
      @ 5,12 say j
     k=j
      wd=bwjm+ALLTRIM(STR(j))
&& CLOSE DATABASES
&& SET COMPATIBLE ON
&& OPEN DATABASE (HOME(2) + 'data\testdata')

&& SELECT 1  && 未使用的工作区
 && USE  G:\三角递增法\&WD ALIAS n && 打开 Customer 表
      For i=(j-1)*500000+1 to (j+1)*500000

      @ 5,12 say i
      n=i
      s=0
      IF MOD(n,5)=1
      s=s+30
      ENDIF
      IF MOD(n,5)=2
      s=s+90
      ENDIF
      IF MOD(n,5)=3
      s=s+120
      ENDIF
      IF MOD(n,5)=4
      s=s+180
      ENDIF
      IF MOD(n,5)=0
      s=s+210
      ENDIF
     
      wou=INT((n-1)/5)*210+s
      SELECT "偶周期"+ALLTRIM(STR(k))
      
      
         && select G:\三角递增法\&WD..DBF IN 0
       A=偶数
         IF A=wou
         SELECT "偶周期"+ALLTRIM(STR(k))
         skip
         LOOP
         ELSE
         SELECT 239
         APPEND BLANK
         REPLACE 无偶 WITH wou
         ENDIF
   
     ENDFOR
ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
每次处理一个大区间段,都需要用手工改,工作区,表名及别名,不知道用变量可以吗?

素数问题的解决是我学习编程永恒的动力。
2021-11-12 20:44
wcx_cc
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:352
专家分:1152
注 册:2015-10-2
得分:0 
楼主的精神真值得学习.虽然我们都生存在这个3维空间中,但是努力突破时空,冲向无限的宇宙中.精神可嘉!!
2021-11-15 03:27
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 125楼 独木星空
你那四步的程序我看了,各个程序结构和逻辑并无明显关联,没法实现你所说的“连接成一个程序”
2021-11-16 08:19
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 127楼 laowan001
不能连成一个程序也无妨,只是我想把第一步的程序,改成变量赋值那种,整个问题有238表,分成了14块,每块处理17个表,因为前后两个表相互关联,所以,必须重叠一个表,即需要首尾相衔接,所以,实际上是处理18个表。每次处理前,都是手工把工作区,编上号码,表名称,及别名。我想实现,第一次把工作区,表名,别名设计好后,第二次外循环时,工作区,表名,别名同时改成第二次的。如第一次处理1至18的偶数周期表,第二次处理18到35的表,第三次处理35到51的表,依次类推,主要想知道有什么语句可以根据外循环值,把工作区号,表名,别名给改写了,不在每一个外循环都手工去改。

素数问题的解决是我学习编程永恒的动力。
2021-11-16 16:49
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 127楼 laowan001
125楼是第九次外循环。当进入第十次外循环时,如何不用手工,直接进入下一次的处理,就是工作区号,表名,别名,变成153至170。当然这种处理时,需要每次外循环后,输出一个无偶数总表出来存上,以便以后做后期处理(第二步,第三步,第四步的处理),也就是说,如何先把第一步,一次性处理完。

素数问题的解决是我学习编程永恒的动力。
2021-11-16 17:11
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
程序代码:
SELECT 239
USE G:\三角递增法\无偶数表总表.DBF ALIAS 无偶数总表
SELECT 136
USE G:\三角递增法\偶数周期表136.DBF ALIAS 偶周期136
SELECT 137
USE G:\三角递增法\偶数周期表137.DBF ALIAS 偶周期137
SELECT 138
USE G:\三角递增法\偶数周期表138.DBF ALIAS 偶周期138
SELECT 139
USE G:\三角递增法\偶数周期表139.DBF ALIAS 偶周期139
SELECT 140
USE G:\三角递增法\偶数周期表140.DBF ALIAS 偶周期140
SELECT 141
USE G:\三角递增法\偶数周期表141.DBF ALIAS 偶周期141
SELECT 142
USE G:\三角递增法\偶数周期表142.DBF ALIAS 偶周期142

上面是你的程序,可以写成下面这样
程序代码:
USE G:\三角递增法\无偶数表总表.DBF ALIAS 无偶数总表 in 0
USE G:\三角递增法\偶数周期表136.DBF ALIAS 偶周期136 in 0
USE G:\三角递增法\偶数周期表137.DBF ALIAS 偶周期137 in 0
USE G:\三角递增法\偶数周期表138.DBF ALIAS 偶周期138 in 0
USE G:\三角递增法\偶数周期表139.DBF ALIAS 偶周期139 in 0
USE G:\三角递增法\偶数周期表140.DBF ALIAS 偶周期140 in 0
USE G:\三角递增法\偶数周期表141.DBF ALIAS 偶周期141 in 0
USE G:\三角递增法\偶数周期表142.DBF ALIAS 偶周期142 in 0

use Tname in 0    && 系统会在一个空闲的工作区打开表

USE G:\三角递增法\偶数周期表138.DBF ALIAS 偶周期138 in 0
可以写成
USE G:\三角递增法\偶数周期表138.DBF in 0    && 表的alias是   偶数周期表138.DBF
在使用到这个表时可以这样
select 偶数周期表138    && 一个表为什么要有个表名还要有个别名呢?
所以,开始那段程序也可以写成下面这样
程序代码:
USE G:\三角递增法\无偶数表总表.DBF in 0
USE G:\三角递增法\偶数周期表136.DBF in 0
USE G:\三角递增法\偶数周期表137.DBF in 0
USE G:\三角递增法\偶数周期表138.DBF in 0
USE G:\三角递增法\偶数周期表139.DBF in 0
USE G:\三角递增法\偶数周期表140.DBF in 0
USE G:\三角递增法\偶数周期表141.DBF in 0
USE G:\三角递增法\偶数周期表142.DBF in 0




[此贴子已经被作者于2021-11-16 20:59编辑过]

收到的鲜花
  • 独木星空2021-11-18 06:20 送鲜花  2朵   附言:给出打开工作区新方法
2021-11-16 20:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507201-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.427938 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved