| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10925 人关注过本帖
标题:优化程序或者从新编写求四生素数中项不能合成的偶数
取消只看楼主 加入收藏
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册:2016-6-29
结帖率:100%
收藏
已结贴  问题点数:60 回复次数:236 
优化程序或者从新编写求四生素数中项不能合成的偶数
* 以大定小选配素数对
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
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册:2016-6-29
收藏
得分:0 

素数问题的解决是我学习编程永恒的动力。
2021-10-17 19:35
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册: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
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册: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
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册: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
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 7楼 xuminxz
这个限制是无法避免的。指溢出这个现象。就是用函数mod(n.m)也会溢出,计算错误。不过此问题,不会出现,因为,100亿内的四生素数表已经提供,预计在43.5亿后不在有反例,一个加法运算,在允许范围以内,不会出现溢出现象。那个程序我运行过,只是嫌它运行太慢,才有此举。

素数问题的解决是我学习编程永恒的动力。
2021-10-17 22:03
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 8楼 吹水佬
不知此话怎讲?如果说,问题的合理性,那不需要考虑,因为我实际运行过(也证明了它的存在性及合理性)。就是说,那个表存在加法合成元素(即x+y=2N中,x和y的取值),合成结果也已给出:210m+38,210m+188,210m+218(或者用其中项,把表中所有值都减去4,即为中项,此时合成数为210m+30,210m+180,210m+210).
    如果不是命题方面,而是程序上的事情,有就不知道说的是什么了。
必要性何解?充分性又何解?

素数问题的解决是我学习编程永恒的动力。
2021-10-17 22:12
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 12楼 sdta
(11,13,17,19)的中项为15,(101,103,107,109)的中项为105,15+105=120,(191,193,197,199)的中项为195;
15+195=210,15+15=30,105+105=210,195+195=390(1*210+180),105+195=300(1*210+90),以上各楼有误:
在210周期内有5类数可以合成:210m+30,210m+38,210m+90,210m+120,210m+180,210m+210这五类偶数,另外210m+60,210m+150这两类偶数不能被合成,也不考虑它们。只查找那5类偶数中无解的。
即x+y=2N,2N是所列的五类数中的偶数。x,y是四生素数的中项值。

素数问题的解决是我学习编程永恒的动力。
2021-10-17 22:23
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 9楼 吹水佬
如果对于命题而言,充分性与必然性并存,无懈可击。
如果谈程序优化,就不知道了。
吹水佬版主可以试运行,只不过,那个程序太菜,运行速度极慢,估计的一个月才能运行到43.5亿,如果想推翻它,需要在43.5亿后找到反例才可(即无解偶数)。

素数问题的解决是我学习编程永恒的动力。
2021-10-17 22:37
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:935
专家分:683
注 册:2016-6-29
收藏
得分:0 
希望大家继续参与讨论,其实不需要考虑别的因素,你就知道那个四生素数表中放着x,y可以取值的元素,有小到大排列。程序需要解决任意两个数相加,有那个具体偶数无解即可。偶数是5类偶数中的偶数,其余偶数不需要考虑。

素数问题的解决是我学习编程永恒的动力。
2021-10-18 07:24
快速回复:优化程序或者从新编写求四生素数中项不能合成的偶数
数据加载中...
 
   



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

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