- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高次幂取模
高次幂取模(快速幂取模)(张鹏) 基本概念及思想 对形如ab mod m 的运算(b一般较大) 但a,b,m都在long型范围内 算法的主要思想是分治,分而治之。将大的问题分成若干个相似的较小的问题! 具体实现是用递归的方法! 举例 2100 mod 3 像这种运算如果先算出2100 的值,然后再模上3,相信比较困难! 我们可以将100变小点 2100=(250)2 =((225)2)2=((((21)2)2)…)2 若我们已经得出250 mod 3的值,我们便很简单地得出2100 mod 3的值。 续上 按照上述的方法继续分下去… 最终肯定会得到 21 mod 3 这种情况!这样就好办了!这便是递归的边界,到此我们就可以返回2 mod 3的值了! 另一个问题,再分时有两种情况! 2100=(250)2 , 100是偶数 299=(249)2 *2 , 99是奇数 第二种情况需要在第一种情况上乘上一次基数。 主要代码 long mod(long a,long b,long m) { if(!b) return 1; //边界处理 if(b==1) return a%m; //边界处理 long ans=mod(a,b/2,m); //进入下一层 ans=ans*ans%m; //返回值ans代表ab/2 if(b1) ans=ans*a%m; //奇数情况处理 return ans; //返回ans代表abmodm } 调用 上述函数是有三个参数,且有返回值! 它的功能是计算ab mod m的值! 如何在主函数里调用呢? 例如我们要计算2100mod3的结果!我们可以首先定义一个变量ans,在主函数读入工作完成后,我们可以写ans=mod(2,100,3); ans 里的数值便是2100mod3的结果了。 递推法 用递推法首先要将b转换为二进制数,(b)10=(b)2。 举例: (45)10=(101101)2 545 mod 3 =2 二进制数由0和1组成,它们分别代表着偶数和奇数。 递推时在0和1处的处理是有差别的。 参考代码 二进制转换: long s=0; while(b0) { t[++s] = b%2; b/=2; } 续上 递推过程: long ans=1; for(i=1;i=s;i++) if(t[i]) ans=ans*ans*a%m; else ans=ans*ans%m; End Thank you * *
您可能关注的文档
最近下载
- (正版) GB 50367-2013 混凝土结构加固设计规范.docx VIP
- (2025春)人教版二年级数学上册全册教案.doc
- 小学课程表word模板可编辑a4纸打印.docx VIP
- 栽培小能手.ppt VIP
- 2025年CCAA国家注册审核员考试(认证通用基础)历年参考题库含答案详解(5卷).docx VIP
- 14.2+血管与心脏+第2课时(教学课件)生物苏科版2024八年级上册.pptx VIP
- MSDSFORsilicondioxide白碳黑英文安全技术说明书.pdf VIP
- 15J401 钢梯-标准图集.docx VIP
- 药剂学(第9版)ER 9-1 第九章液体制剂的单元操作(课件).pptx VIP
- 土地复垦方案编制规程通则.doc VIP
文档评论(0)