| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10213 人关注过本帖
标题:优化程序或者从新编写求四生素数中项不能合成的偶数
取消只看楼主 加入收藏
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
段落    统计    最小值
200    1    0
300    1    100
400    2    200
500    2    300
600    3    400
700    3    500
800    4    600
900    4    700
1000    5    800
1100    5    900
1200    6    1000
1300    6    1100
1400    7    1200
1500    7    1300
1600    8    1400
1700    8    1500
1800    9    1600
1900    9    1700
2000    10    1800
2100    10    1900
2200    11    2000
2300    11    2100
2400    12    2200
2500    12    2300
2600    13    2400
2700    13    2500
2800    14    2600
2900    14    2700
3000    15    2800
3100    15    2900
3200    16    3000
3300    16    3100
3400    17    3200
3500    17    3300
3600    18    3400
3700    18    3500
3800    19    3600
3900    19    3700
4000    20    3800
4100    20    3900
4200    21    4000
4300    21    4100
4400    22    4200
4500    22    4300
4600    23    4400
4700    23    4500
4800    24    4600
4900    24    4700        
5000    25    4800        
5100    25    4900        
总计算    650    20211020    分成100份    或许更好
把50亿分成50段,每段1亿,共需要排查650块数据;或者分成100块,每段0.5亿。这样会加快处理速度。

素数问题的解决是我学习编程永恒的动力。
2021-10-20 13:20
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
分段四生素数个数.zip (667 Bytes)
这是把50亿内的四生素数表分成50段,每段四生素数的个数表及到此范围内总四生素数的个数,为分块处理做准备。

素数问题的解决是我学习编程永恒的动力。
2021-10-20 20:11
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
再也没有人介入此问题,是我最大的失望。如果有人对此问题,进行促膝畅谈,进行算法交流,不胜感激涕零。

素数问题的解决是我学习编程永恒的动力。
2021-10-20 23:15
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 40楼 吹水佬
或许吧!对于素数这个大熔炉,它会有好多素材,供人们练习编程。这里有一个问题就是,兴趣是最好的老师。本主题,在对它了解以前,或许也想不到很好的方法。
     撇开与素数有关的不谈,因为一时半会,还真说不清楚。但是此问题作为编程素材,还是可以讲得很清楚的,我上传了四生素数表,可以不去管它,就认为是一种具有某特征的奇数就好,安大小排列,然后就是从中任意取两个数做和,即进行加法运算,比会得到一个确切值,这些值可以分成五大类,合成数,即两个数相加,模210,一定是余数0,30,90,120,180;绝对不会出现模210,余数是60或者150的情况。也就是说,假设以210为周期,这个周期内最多可以合成5个数,其余的不管是不是偶数,都不可能被合成,奇数就不用考虑了。
     那么,现在的问题是把小范围内的反例找出来,即从理论上能被合成的数,实际上并没有解的偶数,预估算,大于43.5亿后不在有反例出现。所以提供了50亿内的四生素数表(说是四生素数表,只是表中每一组四生素数是用最后一个素数代替的,其余素数也不用考虑进去,如果用整个四生素数,是比加大难度和运算量,用代表就可以完成使命)。四生素数,如(11,13,17,19)第一组,表中以19代替本组,中项就是19-4=15,只考虑两个中项和的结果。

素数问题的解决是我学习编程永恒的动力。
2021-10-21 05:47
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\各段四生素数个数.DBF ALIAS 四生个数表
SELECT 3
USE D:\三角递增法\偶数表.DBF ALIAS 偶数表
kssj=SECONDS()
 For i=2 to 2
      @ 5,12 say i
      FOR j=1 TO INT(i/2)
      SELECT 3
      DELETE ALL
      PACK
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=四中
               jl=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 @ 15,22 say k2
                 B=四中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 SKIP
                 ENDFOR
               SELECT 1
               GO jl+1
             ENDFOR
             Select A.* Into Table d:\三角递增法\偶数表升序j From 偶数表 A Inner Join (Select 偶数 From 偶数表 Group By 偶数 Having Count(*)=1) B On A.偶数=B.偶数
       ENDFOR
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是今天早晨制作的,不完善,不能应用。
原因就是,当内部主体循环完成后(最里的两层循环,主要是完成偶数表,即任意取两段数据进行组合),紧接着的语句是否可以完成使命,在手工操作时,把那条语句写好后,回撤,即可运行,获得一个新表,而且已经去重,每类偶数只留下一个代表。当第二层循环完,需要对新建的j个表,进行同样处理,即去重,留下唯一,完成后存一个结果表就OK了。最外层循环值,每一次循环都会得到一个处理好的表,里边都是单一记录,没有重复,是2亿区间段,能被合成的偶数,最后在用这些表找到不能合成的偶数即可。

素数问题的解决是我学习编程永恒的动力。
2021-10-21 06:57
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 42楼 sdta
对!把第一组归为四生素数的例外,(5,7,11,13),因为它模30的形式,与其他的不同,属于四生素数的特例,不需要考虑它。
     先生有空把我新发的程序补充完善,是它真正的应用起来,即完成最里边两层循环后,把偶数表进行整理,去重复,留唯一;
    再就是,完成第二层循环后,进行同样处理,把已经处理过的j表(偶数表升序j),再进行一次去重留唯一的处理后,进行保存,每一个外循环值,对着一个处理好的结果表就可以了。
    总共运行50次(i=2 to 51),就完成使命了,最后两步,每个外循环,都得完成25次循环。

素数问题的解决是我学习编程永恒的动力。
2021-10-21 07:09
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
也就是说,这个问题,可以反其道,而为之,即我们不去找反例,而是统计每个偶数可以有多少种合成方法,把这个对立面解决了。那个问题不攻自破。

素数问题的解决是我学习编程永恒的动力。
2021-10-21 07:35
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
设i=2,运行结果出来了,运行时间12分14.47秒,但是所形成的新表不正确,仅有1381个偶数。这个值是不正确的。用前4千多个四生素数中项,做加法运算,一亿范围的散布,不可能就这些偶数,不知道最内两层循环时,没有移动到下一个记录,还是其他原因。
     我点击那个表时,0字节,不能被打开,关闭(vfp)后,才可以打开,有了字节(在关闭后的同时),是丢了数据,还是没有移动指针?我能想到的就这两种情况。
     再就是,新建表如何与第二层的循环值j挂起钩,即j为几,那个处理表就为几(偶数升序表j),是用文本号加&吗?在Excel的公式处理是这样的,需要“=”号吗?

素数问题的解决是我学习编程永恒的动力。
2021-10-21 07:47
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\各段四生素数个数.DBF ALIAS 四生个数表
SELECT 3
USE D:\三角递增法\偶数表.DBF ALIAS 偶数表
kssj=SECONDS()
 For i=2 to 2
      @ 5,12 say i
      FOR j=1 TO INT(i/2)
      SELECT 3
      DELETE ALL
      PACK
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        dimension  arr1[fgs1]
        SELECT 1
        GO zgs1-fgs1+1
        FOR l1=1 TO fgs1
        arr1[l1]=四中
        SELECT 1
        SKIP
        ENDFOR
        
        SELECT  2
        GO i-j
        zgs2=总个数
        fgs2=分个数
        dimension  arr2[fgs2]
        SELECT 1
        GO zgs2-fgs2+1
        FOR l2=1 TO fgs2
        arr2[l2]=四中
        SELECT 1
        SKIP
        ENDFOR
        
     
               FOR k1=1  TO  fgs1
                 For k2=1 to fgs2
                 C=arr1[k1]+arr2[k2]
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 ENDFOR
               ENDFOR
            Select A.* Into Table d:\三角递增法\偶数表升序j From 偶数表 A Inner Join (Select 偶数 From 偶数表 Group By 偶数 Having Count(*)=1) B On A.偶数=B.偶数
       ENDFOR
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
用数组代替后,用时7分23.75秒,也不快。所得表数据不正确,只有1381个,估计是把只有一条记录的给挑出来了,而不是去掉重复。

素数问题的解决是我学习编程永恒的动力。
2021-10-22 00:57
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:864
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 40楼 吹水佬
这个问题,从编程角度考虑不是太难。如果从素数这个知识面来说,也不能说,有多么难,但是对于素数有关的命题来说,就有点难得不像话了,几百年来,哥德巴赫猜想,孪生素数猜想,至今,没有解决,这种纯数学的东西,真的是枯燥无味。没有兴趣,就没有动力。
     说一个类似问题,例如,孪生素数的中项,用两个孪生素数的中项做和,现在考虑的问题,我们把素数对(3,5)去掉,因为它是例外集,不合群,其余的孪生素数对的中项都可以表示成6n的形式,现在问题来了,找那些没有孪生素数对中项和的偶数,它的量比较少,不出1万,就找全了,一共有12个6n类的偶数。不需要分段处理,一次性可完成。
     但是四生素数中项的和,可以合成模210,余数为0,30,90,120,180,这五类偶数,余数60和150,不能被合成,也不需要考虑,只考虑那五类数中的反例,预估算范围在43.5亿后,没有反例,所以我提供了50亿的四生素数表(是用最末的一个素数代表的,如果用中项,让它减4即可),而且安大小顺序排列(升序)。
       如果不划分区间,可能受各方面的限制

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



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

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