标题:优化程序或者从新编写求四生素数中项不能合成的偶数
只看楼主
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
结帖率:100%
已结贴  问题点数:60 回复次数:267 
优化程序或者从新编写求四生素数中项不能合成的偶数
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L8四生素数尾素不能合成数.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L8四生素数真表.DBF  ALIAS 素数表
kssj=SECONDS()
FOR i=23000001  to 24000000
@ 3,6 say i
    n=i
       X=8+(INT((n-INT((n-1)/5)*5)/2)+(n-INT((n-1)/5)*5))*30+INT((n-1)/5)*210 &&这是在给被判偶数置数,思路每5个偶数构成一个循环期,步长210。
          Y=X/2   &&求出偶数的中值(上一条置数语句,除了外步长210,还有内步长30,但是有2个间断点,所以有些复杂。
        SELECT 素数表
        LOCATE FOR 四素>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE 四素>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=四素
                GO xjl
                xss=四素
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                IF xss<Y+1 OR dss>Y-1                              &&判断跳出语句如果放在后面,有时出现一个重复素数对
                          t=.T.
                          ELSE
                          t=.F.                                       &&跳出命令
                ENDIF                                               &&结束判断
                DO CASE
                        CASE xss+dss>X
                                GO djl
                                SKIP -1
                                djl=RECNO()
                        CASE xss+dss=X
                                EXIT
                        CASE xss+dss<X
                                GO xjl
                                SKIP
                                xjl=RECNO()
                                GO djl
                ENDCASE
        ENDDO
        IF xss>Y OR dss<Y
        SELECT 素数对
                                APPEND BLANK
                                REPLACE 偶数 WITH X
        ENDIF
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是我编写的程序,下一贴把四生素数表(最末的一项代表值,即一组四生素数用最末的一个素数代替),发上来,还有存储表:不能被合成的偶数。
搜索更多相关主题的帖子: 素数 偶数 合成 SELECT CASE 
2021-10-17 19:31
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 

素数问题的解决是我学习编程永恒的动力。
2021-10-17 19:35
Bc_Newboy
Rank: 2
等 级:论坛游民
帖 子:72
专家分:99
注 册:2019-4-14
得分:15 
2021-10-17 19:36
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
* 以大定小选配素数对
LOCAL xjl,djl,ts,xss,dss,kssj,tj
CLEAR
SELECT 1
USE D:\vfp温习\L8四生素数中项不能合成数.DBF ALIAS 素数对    &&素数对表结构:偶数、统计
SELECT 2
USE D:\vfp温习\L8四生素数表.DBF  ALIAS 素数表
kssj=SECONDS()
FOR i=31  to 1000
@ 3,6 say i
    n=i
       X=19+(n-INT((n-1)/3)*3-1)*90+INT((n-1)/3)*210 &&这是在筛选四生素数置数,非寻找不能合成的偶数。
          Y=X/2   &&求出偶数的中值
        SELECT 素数表
        LOCATE FOR 四中>X
        DO CASE
                CASE EOF()
                        GO Bottom
                CASE 四中>X
                        SKIP -1
        ENDCASE
        xjl=1
        djl=RECNO()
        t=.T.
        DO WHILE t
                dss=四中
                GO xjl
                xss=四中
                                              &&放在这里比较合适,这里原来显示小素数的值,去掉了。
                IF xss<Y OR dss>Y                              &&判断跳出语句如果放在后面,有时出现一个重复素数对
                          t=.T.
                          ELSE
                          t=.F.                                       &&跳出命令
                ENDIF                                               &&结束判断
                DO CASE
                        CASE xss+dss>X
                                GO djl
                                SKIP -1
                                djl=RECNO()
                        CASE xss+dss=X
                                EXIT
                        CASE xss+dss<X
                                GO xjl
                                SKIP
                                xjl=RECNO()
                                GO djl
                ENDCASE
        ENDDO
        IF xss>=Y OR dss<=Y
        SELECT 素数对
                                APPEND BLANK
                                REPLACE 偶数 WITH X
        ENDIF
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这个程序运行前,必须把四生素数表的值统一减4,变成四生素数中项才可以,直接用不能完成任务。
在模210之内,只能合成30,180,210,三类数,210m+30,210m+180,210m+210这三类数,其他的皆不能合成。
所设计程序的目的是查找小范围内没有合成方法的偶数(属于它们三类之中的偶数,其余偶数不必考虑)。

素数问题的解决是我学习编程永恒的动力。
2021-10-17 19:44
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
如果直接用四生素数表,是合成210m+38,210m+188,210m+218,即主楼的程序;用四楼的程序时,四生素数表需要简单处理,让每个四生素数表中的元素--4(减4),或的其中项值。
     四生素数表,不能被合成的偶数,用到的两个表发在2#
     希望大家勇于参加讨论,和优化程序,或者提供新的算法。大概在43.5亿后不在有反例,小范围出现反例多,大范围时,出现反例明显减少。这两种程序都有点缺陷,小的值会进入无限循环,达不到跳出条件,所以可以从100起步,即210*100=21000,前边的可以不处理,在Excel中容易办到。

素数问题的解决是我学习编程永恒的动力。
2021-10-17 19:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:15 
请楼主先普及一下何谓四生素数 
四生素数中项不能合成的偶数 不知道如何理解

坚守VFP最后的阵地
2021-10-17 20:37
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:15 
看样楼主是在研究数论,而不是VFP或VB的某种特定语言。可能要打击你一下了。如果进行数论的研究,你遇到的数会很大,并且溢出。不论用什么语言,现成的算法都会溢出。
需要构造一组计算方法,能进行四则运算及其它需要的运算。这种方法应该是只要计算机的外部存储空间够大,计算就能进行下去。几十上百位甚至更多位的运算都可以进行。

dBase有人接盘了。
2021-10-17 20:51
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:15 
只能做很有限的必要性,谈不上能做充分性。
2021-10-17 21:03
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
只能做很有限的必要性,谈不上能做充分性。
2021-10-17 21:06
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 6楼 sdta
四生素数是指像(11,13,17,19)这样的素数群(国外称四元组),也就是有两组孪生素数对构成的,它们具有统一特征,如果用构成它的四个素数分别减去第一个素数(首素数),则差值固定:(0,2,6,8),我称它为:四生素数的素数式,这是我自己对它的称谓,没有官方认证,也不是现有数学的名词,术语。当一组素数,有四个素数组成一组,头尾素数差值为8时,所组成的素数组中的素数差(皆以第一个素数作为被减数),与我列的素数式相同时,即为最密的4生素数,意思是说,无论你如何安排,在自然数段,跨距为8(首位两个数的差值),长度为9(包括首位数,所占位,也是跨度加1为长度)。
     不知道能否理解。一句话,有两组孪生素数对构成的四元组素数群,这两对孪生素数对的差为6(小的减小的,或者大的减大的,例如(11,13)与(17,19)这两对,17-11=6,或者19-13=6).
用其末项代表这一组四生素数,是19(19为最密四生素数(11,13,17,19)的末素数),同理109(101,103,107,109),我给的四生素数表中的数都是四生素数的末素数。
     现在说一说,程序需要解决的问题:x+y=2N,x,y都是四生素数中的末素数,2N只能取:210m+38,210m+188,210m+218这三类数中的数,其余的偶数不考虑。
     现在找这三类数中的反例,即方程无解的偶数,把没有解组的偶数储存即可。预计43.5亿后,不在有反例存在。是否理解请回复。

素数问题的解决是我学习编程永恒的动力。
2021-10-17 21:56



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




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

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