(费马小定理素数判定蒙哥马利算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(费马小定理素数判定蒙哥马利算法

费马小定理 素数判定 蒙哥马利算法(强烈推荐) 2009-11-07 12:42 费马小定理 素数判定 蒙哥马利算法 约定: x%y为x取模y,即x除以y所得的余数,当xy时,x%y=x,所有取模的运算对象都为整数。 x^y表示x的y次方。 乘方运算的优先级高于乘除和取模,加减的优先级最低。 见到x^y/z这样,就先算乘方,再算除法。 A/B,称为A除以B,也称为B除A。 若A%B=0,即称为A可以被B整除,也称B可以整除A。 A*B表示A乘以B或称A乘B,B乘A,B乘以A……都TMD的一样,靠! 复习一下小学数学 公因数:两个不同的自然数A和B,若有自然数C可以整除A也可以整除B,那么C就是A和B的公因数。 公倍数:两个不同的自然数A和B,若有自然数C可以被A整除也可以被B整除,那么C就是A和B的公倍数。 互质数:两个不同的自然数,它们只有一个公因数1,则称它们互质。 费马是法国数学家,又译“费尔马”,此人巨牛,他的简介请看下面。不看不知道,一看吓一跳。 /BasicStudy/LearnColumn/Maths/shuxuejiashi/j12.htm 费马小定理: 有N为任意正整数,P为素数,且N不能被P整除(显然N和P互质),则有: N^P%P=N(即:N的P次方除以P的余数是N) 但是我查了很多资料见到的公式都是这个样子: (N^(P-1))%P=1 后来分析了一下,两个式子其实是一样的,可以互相变形得到,原式可化为: (N^P-N)%P=0(即:N的P次方减N可以被P整除,因为由费马小定理知道N的P次方除以P的余数是N) 把N提出来一个,N^P就成了你N*(N^(P-1)),那么(N^P-N)%P=0可化为:(N*(N^(P-1)-1))%P=0 请注意上式,含义是:N*(N^(P-1)-1)可以被P整除 又因为N*(N^(P-1)-1)必能整除N(这不费话么!) 所以,N*(N^(P-1)-1)是N和P的公倍数,小学知识了^_^ 又因为前提是N与P互质,而互质数的最小公倍数为它们的乘积,所以一定存在正整数M使得等式成立: N*(N^(P-1)-1)=M*N*P 两边约去N,化简之: N^(P-1)-1=M*P 因为M是整数,显然: (N^(P-1)-1)%P=0 即: N^(P-1)%P=1 ============================================ 积模分解公式 先有一个引理,如果有:X%Z=0,即X能被Z整除,则有: (X+Y)%Z=Y%Z 这个不用证了吧... 设有X、Y和Z三个正整数,则必有:(X*Y)%Z=((X%Z)*(Y%Z))%Z 想了很长时间才证出来,要分情况讨论才行: 1.当X和Y都比Z大时,必有整数A和B使下面的等式成立: X=Z*I+A(1) Y=Z*J+B(2) 不用多说了吧,这是除模运算的性质! 将(1)和(2)代入(X*Y)modZ得:((Z*I+A)(Z*J+B))%Z 乘开,再把前三项的Z提一个出来,变形为:(Z*(Z*I*J+I*A+I*B)+A*B)%Z(3) 因为Z*(Z*I*J+I*A+I*B)是Z的整数倍……晕,又来了。 概据引理,(3)式可化简为:(A*B)%Z 又因为:A=X%Z,B=Y%Z,代入上面的式子,就成了原式了。 2.当X比Z大而Y比Z小时,一样的转化: X=Z*I+A 代入(X*Y)%Z得: (Z*I*Y+A*Y)%Z 根据引理,转化得:(A*Y)%Z 因为A=X%Z,又因为Y=Y%Z,代入上式,即得到原式。 同理,当X比Z小而Y比Z大时,原式也成立。 3.当X比Z小,且Y也比Z小时,X=X%Z,Y=Y%Z,所以原式成立。 ===================================================== 快速计算乘方的算法 如计算2^13,则传统做法需要进行12次乘法。 /*计算n^p*/ unsigned power(unsigned n,unsigned p) { for(int i=0;ip;i++) n*=n; return n; } 该死的乘法,是时候优化一下了!把2*2的结果保存起来看看,是不是成了:4*4*4*4*4*4*2 再把4*4的结果保存起来:16*16*16*2 一共5次运算,分别是2*2、4*4和16*16*16*2 这样分析,我们算法因该是只需要计算一半都不到的乘法了。 为了讲清这个算法,再举一个例子2^7:2*2*2*2*2*2*2 两两分开:(2*2)*(2*2)*(2*2)*2 如果用2*2来计算,那么指数就可以除以2了,不过剩了一个,稍后再单独乘上它。 再次两两分开,指数除以2: ((2*2)*(2*2))*(2*2)*2 实际上最后一个

文档评论(0)

xinghua3aa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档