|
估一估,2^100000007-1会有什么样的素因子?
100000007是一个最小的9位素数,梅森数2^100000007-1可能是梅森素数,但几率极低;
故这个梅森数很可能是合数。
如果这个梅森数是合数,则它的素因子一定是2*100000007*k+1中的某几个素数,
其中k为1,3,4,5,7,8,9,……;k中没有2,6,10,……4n+2型的正整数。
一般我们把2与k合并到一起,若仍有k表示,则:
梅森数2^100000007-1的素因子一定是100000007k+1中的某几个素数,
其中k为2,6,8,10,14,16,18,……;k中没有4,12,20,……8n+4型的正整数。
用试除法寻找梅森数的素因子,
试除所用到的最大试除数不超过梅森数的平方根,2^5000003.5约等于10的15051500次方,
相应的k不超过10的15051492次方,但后部的大k可能是无用的。
实际上试除中如果找到了一个素因子之后,继续试除时只需要试除到“梅森数除以第1素因子之商”的平方根即可。
同时试除工作不用从头开始,而是从上一个有用的k之后接着进行的;
同时梅森数的第2素因子不会小于第1素因子的2倍,故下一个试除用k加倍即可。
在找到第1个素因子后,反查一下该素因子对应的k,再看一看该k的2倍是不是2,6,8,10,14,16……中的数字;
若不是,则下一个试除用k再加倍即可(4倍数)。
先算出一些较小的100000007k+1的正整数,例如先算1万的,注意只要其中的2,6,8,10,14,16,……即可;
再找出其中的素数,接着从最小素数逐个试除即可。
如果选定的素数已用完,但没有找到给定梅森数的最大素因子,则需加大试除用k,直至找到梅森数的第1个最小的素因子为止;
此时试除工作只完成了第一步。
例:100000007k+1型素数表
k 100000007k+1 分解式
18 1800000127 1800000127 is prime
50 5000000351 5000000351 is prime
86 8600000603 8600000603 is prime
146 14600001023 14600001023 is prime
168 16800001177 16800001177 is prime
3000多万位的梅森数除以第一个试除用素数1800000127,我是不会算,太阳先生会算吗?
再告诉你两个绝招:
一、所有的梅森因子都是模8余1或7的,如果上述素数之中有模8余3和余5的统统去掉,不必试除;
上面的5个素数中第3个素数模8余3,不必用它试除了。
二、所有梅森因子都只能是某一个特定梅森数的因子,如果你收集或下载了全部已知的梅森因子,那怕是部分梅森因子也行,
将你所筛选的待试除用的素数与梅森因子表中的素因子比对一下,如果梅森因子表中有那个素数,也不必再试除。 |
|