- 注册时间
- 2008-2-6
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 51573
- 在线时间
- 小时
|
楼主 |
发表于 2008-4-4 11:06:17
|
显示全部楼层
http://hi.baidu.com/caronation/blog/item/b9397682159f5fa60cf4d25e.html
【世界数学难题】素数判定与大数因子分解问题(下)
6.一种概率算法
缪内的结果虽然很好,但它毕竟是依赖于一个悬而未决的假设.因而在实用中,它是不能被采用的.故我们回到勒默的结果,看看从这个结果还能引伸出什么方法来.
勒默的结果说,若n是合数,则存在a,满足(a,n)=1使样的a至少有多少.
n是合数时,由勒默的结果定理2.12,Mn是Un的真子群,即Mn≠Un,因而Mn在Un中的指标至少是2,即(Un∶Mn)≥2.故Mn中的元素个数至多是Un中元素个数的一半,即Un中不在Mn中的元素个数至少
(modn).
证明 对1到n之间的数a,若(a,n)≠1,则显然a不满足
这个推论可以产生一种作“素性判别”的概率算法:
对任何输入n,从1到n之间随机地抽取k个数a1,a2,…,ak
是否成立,若有某个ai使此同余式不成立,则断言n是合数;若对a1,…,ak,同余式都成立,则断言n是素数.
在这个算法中,ai的选取是随机的,而且结论(断言)正确性不是完全确定的,故此算法叫概率算法.在这个概率算法中,当得到断言说输入n是合数时,由定理2.11,结论是正确的;当得到断言说输入是素数时,没有什么定理可以确保结论是正确的.也就是说,此算法在执行完毕后,可能将一个事实上是合数的输入断言为是素数了.但是,由以上定理2.15的推论,这种出错的概率是很小的.因为,若n事实上是合
乎为零(但不是零!),因此用此算法作素数判别21000次,仅可能出现一次错误(从统计的角度来说).然而,对某个特定的n,通过算法后被断言为素数,我们并不能确定这个断言一定不是错误的.因为以上的原因,这个算法常被称为“合数判别”算法而不称为素数判别算法.但是,因为这个算法的计算量很小,只有$O(klog_2 3n)$,故它确实常被采用.例如用它来寻找一组数,使其中绝大多数是素数.最近,还有人(如赖宾)用它来支持一些孪生素数和素数分布的猜想.
7.目前最有效的艾德利曼经—鲁梅利算法 1983年,素数判别的研究里,出现了突破性的进展,那就是艾德利曼和鲁梅尼提出来了一个方法.这个方法是一个近似多项式算法,它在实际应用中,对一千位以下的数而言,与多项式算法一样有效.
要系统地讲述这个算法,需要涉及到代数数论、乘法数论及多项式理论等多方面的专门知识.因而,我们这里只是概要地介绍这个算法,很多证明就略去了.但我们尽量保证读者能从介绍中对算法的基本思想、方法和技巧有个大概了解.我们将介绍的不是艾德利曼—鲁梅利原来的形式,而是由勒恩斯爵简化了的形式.
设$p, q$是两个素数,$p|q-1$,记$zeta p$和$zeta q$分别为p次和q次本原单位根.设$g_q$是$q$的原根,即$g$是群$U_g$的生成元.定义映射$Xpq:U_q->$(其中$$为由$zeta p$生成的循环群)为$Xpq(g^q^j)={zeta_p}^j$.因为$p|q-1$且$U_q$是$q-1$元循环群.则$Xpq$是同态映射.对于任给的整
${ zeta p_i zeta q_i | a_{ij} in Z}$是一个环)
由高斯和的性质,有:若n是素数,则$tau(Xpq)^{n^(p-1)-1}-=Xpq(n)(mod n)$(注意:因为$tau(Xpq)$是$Rpq$中的元素,因而,我们是在环$Rpq$中讨论同余式的).易知,$p=2$时,这就是费马小定理,因此,上述的素数的这个性质,事实上就是费马小定理在环$Rpq$中的推广.我们来看看,当一个数$n$,对一些$p, q, p | q-1$满足$tau(Xpq)^{n^(p-1)-1}-=Xpq(n)(mod n)$时,能对$n$作出什么结论.勒恩斯爵对此给予了一个回答,他证明了下面的定理.
一个集合满足,对任意的一个素数$q in Q$有 $q-1 | Z$.若奇数$n$满足下列条件:
(i)对每个$p in P, q in Q$,若$p|q-1$,则$tau(Xpq)^{n^(p-1)-1}-=X_pq(n)(mod n)$
(ii)对每个$p in P$和$n$的素因子$r$有$p^ep|r^{p-1}-1$,其中$p^ep || n^{p-1}-1$.
则每个$n$的素因子$r$,有$r-=n_i(mod w)$,其中$i$有$0<=i1, tau(Xpq)^{n^(p-1)-1}-=Xpq(n)(mod n)$则条件(ii)就对$p$及任何$n$的素因子$r$成立.在实际应用时,对某个$p$要使$Xpq(n)<>1$对某个素数$q(p|q-1)$成立是很容易做得到的.
由勒恩斯爵的结果,我们可以如下编出一个算法,这个算法是基于艾德利曼—鲁梅利的思想,采用了勒恩斯爵的表述.
对任何输入$n$,$n$是奇数.第一步,寻找素数集合$P$,使得由其产
(Ⅰ)对每个$p in P$,$q in Q$使$p|q-1$,验证(即定理2.16中的条件(i)
(Ⅱ)对每个$p in P$,寻找一个$q$(不必属于$Q$)使$p|q-1$且$Xpq(n)<>1$.(这是为了让定理2.16中的条件(ii )成立.)
如果(Ⅰ)对某对 $p in P$,$q in Q(p|q-1)$不成立或(Ⅱ)对某个$p in P$不存在$q$使$p|q-1, Xpq(n)<>1$,,则$n$是合数.否则,即(Ⅰ),(Ⅱ)都通过了,由定理2.16知,n的任何一个素因子$r$满足$r-=n_i(mod w)$,其中
对$r=n_i mod w, i=1, 2,...,Z-1$,逐个检验$r$是否整除$n$.若
在上述算法中,第二步的计算量,可用高斯和的性质(它所满足的最小多项式)估计出来,它是logn的多项式.第一步和第三步可以在O〔(logn)C·logloglogn〕的计算量内完成,这个由下面的波门伦斯的结果得出.
满足. (logn)C1logloglogn<Z<(logn)C2·logloglogn
在第三步中,至多要验证Z个整除式,每个整除式的计算量是O(log3n),因而,完成第三步至多需要O〔(logn)Clogloglogn〕的计算量.
总之,用上述算法验证一个数n是否素数,几乎只需要多项式时间.因为当n的位数不太大时(例如少于1000位),C(logloglogn)是很小的,故其计算量还不及一个多项式算法多.
8.一些特殊的素数及其判别
麦森勒素数
所谓麦森勒数是指形如$2^p-1$(p是素数)的数,记为Mp,M2=3,M3=7,M5=31,M7=127等,麦森勒素数即是麦森勒数又是素数者.
早在1644年,麦森勒就对p=2,3,5,7,11,13,17,19计算了Mp,他证明了除p=11外,其它的Mp是素数,他由此断言,不大于257的各素数,只有p=2,3,5,7,13,17,19,31,67,127,257使Mp是素数.当时没有谁(包括他本人)证明了这个断言.直到1772年,欧拉经过多年探索,证明了是$2^31-1=M_{31}$是素数,大约在1875年,努卡斯证明了$2^127-1$是素数,但是证明了M67不是素数.因此,麦森勒的断言就不全对了.1886年,有人证明了$2^61-1$是素数,因而,人们怀疑麦森勒在抄写时,将61误抄成了67.然而,1911年,泡尔斯证明了$2^89-1$也是素数,三年后,又证明了$2^107-1$也是素数.最后,1922年,葛莱启克证明了$2^257-1$不是素数.这样就彻底说明了麦森勒的断言是不对的.但麦森勒的断言激发了人们对麦森勒素数的研究.到目前为止,已经得到的前29个麦森勒素数Mp是:p=2,3,5,7,13,17,19,31,61,89,107,127,521,607,1279,2203,2281,3217,4253,4423,9689,9941,11213,19937,21701, 23209,44497,86243, 132049.
M132049是一个39751位的素数,是目前已知的最大的素数.要对诸如M132049这么大的数判别其是否素数,肯定要用到数的特殊形式,用特殊的方法(艾德利曼—鲁梅利方法也无济于事了).另外,从上面看出,那些使Mp为素数的素数p的分布是不规则的.因而有必要对麦森勒数研究其特殊的素性判别方法.有一种目前最有效的、专门用于麦森勒数的素性检验方法是下述的努卡斯—勒默方法.
定理2.18 设p是一个奇素数,定义序列${L_n}$如下:
$L_0=4, L_{n+1}=(L_n^2-2) mod 2^p-1$则$Mp=2^p-1$是素数的充分必要条件是$L_{p-2}=0$.
到目前为止,人们得到的最大的素数M132049就是用这个努卡斯—勒默方法得到的,这是1983年9月由斯诺文斯基在大量计算后得到的.
近期,威廉斯对努卡斯—勒默的方法作了推广,他得到一些用于对诸如$10^n+-10^m+1$,${a^n-1}/{a-1}$等形式的数作素性判别的方法.
费马素数
形如$2^2^n+1$的数称为费马数,记为Fn,若它又是素数,则称为费马素数.
早在17世纪,费马验证了F0=3,F1=5,F2=17,F3=257,F4=65537是素数.据此,他猜测Fn都是素数.但到1732年,欧拉分解了F5:
故费马的这个猜测不成立.自此之后,人们对n=6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,25,26,27,29,30,32,36,38,39,42,52,55,58,62,63,66,71,73,75,77,81,91,93,99,117,125,144,147,150,201,205,207,215,226,228,250,255,267,268,275,284,287,298,316,329,334,398,416,452,544,556,637,692,744,931,1551,1945,2023,2089,2456,3310,4724,6537,6835,9428,9448,23471证明了Fn是合数.然而,除前5个费马数为素数外, 再也没发现任何费马素数了.因而人们更倾向于认为费马素数只有有限个,但没人对此作出证明.近年来,人们把精力放在分解费马数上,没人研究特殊的判别法来对费马数作素性判别.
$k2^m+1$型素数
研究$k2^m+1$型素数,对分解费马数有着重要作用.熟知,费马数Fn的每个素因子都具有形状$k2^m+1$,其中m≥n+2,k是奇数.当已知某些$k2^m+1$是素数时,用它去试除Fn(n≤m-2),这样就可以找到一些费马数的因子.另外,在验证了某个$k2^m+1$是素数后,再对$k2^m-1$作素性判别,则可能找出一对孪生素数来,在这个方面的研究是从普罗丝开始的,他首先提出了一个判别$k2^m+1 (k<2m)$型数是否素数的方法.
定理2.19 给定$N=k2^m+1, k<2m$,先寻找一个出一个合适的D),则N是素数的充分必要条件是$D^{(N-1)/2}-=-1(mod N)$.
用普罗丝的这个结果及一些具体的方法,贝利、鲁宾逊、威廉斯等人对一些奇数k和m决定的数$k2^m+1$作了系统的考察,他们对1≤k≤150,1≤m≤1500,找出了所有$k2^m+1$型的素数.又对3≤k≤29和1500<m≤4000,列出了所有的$k2^m+1$型的素数,得出了7个新的费马数的因子,而且还得到了一对很大的孪生素数:297.2546+1和297·2546-1
最后,介绍斯塔克的一个结果.若m固定,序列${ak}={k2^m+1}$含有无限多个素数,这是由狄利克雷定理得出的.自然地,人们提出这样一个问题:当k固定时,序列${b_m}={k2^m+1}$是否含有无限多个素数呢?斯塔克对这个问题给了否定的回答,他给了一个k=2935363331541925531,它使序列${k2^m+1=b_m}$中每一项都是合数.
由1组成的素数
每位数都是1的n位数记为Rn,例如R1=1,R2=11,R7=1111111等等.熟知R2=11是素数.
因为当m|n时,Rm|Rn,故Rn是素数的必要条件是n是素数.然而,n是素数时,Rn不一定是素数,例如n=3时,R3=111=3×37不是素数.至今为止,只有得出当n=2,19,23,317,1031时,Rn是素数.其中R19已由前面的“n±1”判别法证明了,R23是1929年被证明为素数的.R317是1979年由威廉斯证明的,R1031是1986年由威廉斯和达内用第四节介绍的方法证明为素数的.这五个素数是Rn系统中的前五个素数,即其它不大于1031的素数n都使Rn为合数.事实上,达内还证明了,第六个R_素数必定大于R10000,也就是说,在1到R10000之间只有以上五个R_素数.
相关资源
9.在计算机上实施素数判别的战略
迄今为止,所有得到的素性判别法有简单明了的试除法,有赖宾等人的概率算法,有努卡斯到威廉斯的利用$n+-1$,$n^2+1$,$n^2+-n+1$的因子方法,还有艾德利曼—鲁梅利的最有效的近似多项式方法.这些方法各有利弊,它们各适用于适当的输入.上述第一种算法虽然很耗费
接了当,对较小的数n(最大不超过108)合适.第二种算法,用于作素性判别时,它可能出现差错,但出差错的可能性很小,因而可用它来确认哪些数最有可能是素数.努卡斯和威廉斯的$n+-1$,$n^2+1$,$n^2+-n+1$方法,对于20—50位的素数是有效的工具.艾德利曼—鲁梅利的方法是普遍的方法,它不依赖于待判别的数的特殊性,而且计算量是O((logn)Clogloglogn),故一般利用它来对50位以上的数来作素性判别.
另外,对有些特殊的数作素数判别时,用特殊的方法(如对2^P-1,用勒默的方法)就可能很便利,就不必用艾德利曼—鲁梅利的方法.下面,我们指出在计算机上作素性判别的三大步骤.
对于一个待判定的数n(设n不具有我们了解的特殊形式),实行下面三步:
(1)先用1到1000之间的素数(它们通常储存在计算机内)去试除.若n恰好有小的素因子,则不是素数,算法可停止;否则,进行下一步。
出结论说n是素数.下面的步骤就是证明n确为素数. |
|