标题:用删除法编写一个制作素数表的vfp程序
只看楼主
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 150楼 吹水佬
先从第四点,说起:这个问题无非就是做个多么大的筛子,它仍就没有离开筛法的本质。在以2为周期时,只有2n-1,可能是素数;当增到周期6时,即能过素数2,和3的式子,只有6n-5,6n-1,两个式子;当把素数5也拽进来时,只有1,7,11,13,17,19,23,29这八类式子,它们加30n,一直都会有素数产生;说白了,就是素数连成积(素数阶乘)的互质数,所形成的多项式,210n+与210互质的数,共有(2-1)*(3-1)*(5-1)*(7-1)=48个,素数只能在这48个多项式式子中产成,.....,我的筛子,做到2*3*5*7*11*13*17=510510,一个周期的跨度就是510510个,自然数。所需要判断2*4*6*10*12*16=92160个数值,是否为素数,10个外循环,就可以跨过510510*10=5105100个自然数,需要判断92160*10=921600个数是否为素数。这里有个关键性问题,不是一个一个的判断,是否为素数,而是,一次性判断整个区间段内数,是否为素数,这里的一个外循环,是要判断92160个数是否为素数。当然,筛子还可以做大些,根据需要而定。
     那个数据源表,就是一个提前做出来的一个筛子。
     当然这种做法,就一定会用到素数表,所以计划筛选多大范围,就需要其平方根前的素数表。
再说一下,第三点,我的意思不是那种的应用嫁接,还是用它处理同样的问题:
      例如能过素数2,3,5的孪生素数对,(0,2),过素数2时,剩余1个可选,过素数3时,仍就一个可选(因为0除3余数为0,被占用,2除3余数为2,余数2被占用,只有模3余1的余数未被占用);(0,2)过素数5的关卡时,余数0,及余数2被占用,余数1,3,4可取,周期2*3*5=30,(2-1)*(3-2)*(5-2)=3,也就是说,在30周期这个跨度内,只有三个数可以通过:分别为1,13,19.
素数    2    3    5
0    0    0    0
2    0    2    2
剩余余数类    1    1    1
剩余余数类            3
剩余余数类            4
横竖说明    对素数2    对素数3    对素数5
选项            1
选项            7
选项        1    13
选项    1    3    19
选项    2    5    25
可选项    1    1    1
可选项            13
可选项            19
如果不去专门研究,或许得好好理解一下,在30以内,只有30n+1,30n+13,30n+19这三个式子可以产生孪生素数对(用最后一个表示)。
当扩展到,素数7时,仍就需要去掉余数0及余数2,那么30*7=210内,符合条件的,有3*(7-2)=15个式子,可以产生孪生素数对,
周期210    0    30    60    90    120    150    180
1    1    31    61    91    121    151    181
13    13    43    73    103    133    163    193
19    19    49    79    109    139    169    199
先按素数5时,周期30,向后扩展,3*7=21个元素,其中有3*2=6个元素,过不了素数7的关卡。即上边模7余数为0,或者2的。
周期210    0    30    60    90    120    150    180
1    1    31    61    0    0    151    181
13    13    43    73    103    0    0    193
19    19    0    0    109    139    169    199
模7余数是0或2的数置数成0,其余的照搬。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 15:06
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
介绍孪生素数对的生成元,目的是,把那种方法可以运用到孪生素数筛选,同样是做个自己满义的筛子,然后在处理,这时判断一个数,是否为孪生素数对中的末素数,需要排除两个余数,0和2,即筛选时,把余数是0,或者2,都被筛除掉,只留下那些不是余数0或2的数。
    说白了,无论是几生素数,只要筛除掉所占余数类,剩余不被占用的余数即可。都是做个差不多大的筛子,而不是一个一个的去筛选,判断;都是成批的筛选,一次性,就解决一个外循环内的全部数,是否为素数(孪生素数对中的末素),三生素数(0,2,6)或者(0,4,6),三生素数过每个素数关卡时,都是去掉三类余数(是其中之一就被筛除掉)。
   一直扩展到k生素数,去掉k类余数。
5生素数,去掉5类余数,素数3,素数5如何去(大于素数5的素数能想明白),例如5生素数(0,2,6,8,12),素数的余数0,2被占用,只有余数1可取;对于素数5来说,余数0,2,1,3都被占用,只有余数4可取;素数7,余数0,2,6,1,5被占用,只有余数3或4可取。实际上,做筛子时,这些问题已经解决,一般不用小素数参与,它们已经参与过了,筛子就是它们制作出来的。就说5生素数吧,最大的一个余数是12,所以把筛子做到素数13的阶乘即可(2*3*5*7*11*13=30030),而实际筛子远比它大,或许到223092870(2*3*5*7*11*13*17*19*23),即一次外循环就可以解决2亿多个数,是否为k生素数(只是k生素数的代表值,末素数,不是整个k生素数,例如孪生素数对,用7,13,19,31代表那四组素数对)。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 15:44
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
所以说,如果算法,用到数据源表,及素数表时,能稍作变动,就可以制作二生素数,三生素数,四生素数,5生素数,k生素数了,只是把排除一个余数,上升到,排除2类余数,3类余数,4类余数而已。
    所以不用素数表,和数据源表,就不能解决此类问题(制作k生素数表)。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 15:48
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
第一点,来到这个网上,其目的就是相互交流,互动,交换意见,和各自的看法。有时,并不是都有时间,我在工作之余,才上网的,上网时大部分精力也是集中在自己想要解决的问题上,或许也顾不上太多,就会出现没有及时回答,网友所存在的疑问。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 15:54
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
对于第二点:我在Vb6上发的帖子,目的是看一看vb6的样貌,因为我是不就前,在静夜思管理员给提供的连接中,下载的vb6,对它一窍不通,我可以通过对比(与vfp),尽快的进入其门。变通没有关联。目的就是学习vb6。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 16:00
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
在这个问题上:laowan001的算法可行,用四生素数的数据源表,和素数表,把原来的只去掉余数0的条件,改成去掉余数0,2,6,8的条件就获得了,4生素数;改成去掉余数0,2,6的就得到3生素数中的一种3生素数;去掉余数0,2,就可以得到孪生素数对。.....
    各种k生素数的数据源表,只要想用的,在本主题内可以说一下,我压缩后发出。素数表谁都会制作,就免了。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 16:06
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
本题总括成一句话,就是用大筛子,筛选各种k生素数。算法要针对一个外循环,成批处理,不要把大筛子中的数,一个一个的去处理,那样很慢,拖泥又带水。筛子的目的,就是提前处理,轻装上阵。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 16:10
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
无论你怎么说,只要妨碍不到他人,是没有人吱声的,只有自己,自导自演。

素数问题的解决是我学习编程永恒的动力。
2021-10-25 05:30



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




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

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