蒙哥马利幂模算法(二分快速幂)

用于加快幂次取模运算的速度。

形式为这种ab%c 可以等于 (ab1%c)*(ab2%c)%c,其中b=b1+b2;如果b1=b2就更简便一些,(ab/2%c)2%c,只要把数拆成平方的形式就可以使用幂次转二进制的简便运算了。即把x2的幂次转二进制为x10

比如求解某一个值xn%m:513%7

首先把n以二进制显示:13(10) = 1101(2) 。定义结果值 r,初始化为1。基值x:n值每次除以2则x就需要加倍。每轮判断n值最末尾位:如果为1,则就表示结果值 r 需要更新改变,也就是 r = r * x%m ;如果为0,则结果值不用更新。

即:51101=51000 * 5100 * 51 ,x就是计算每段的51、5100、51000,r就是计算所有x值乘起来的值。

//c和c++代码
long long my_pow(long long x,long long n,long long m){//x^n%mlong long r =1;//最终求余结果while(n>0){if(n&1) {//只要最低位为1就可以更新结果(n&1等价n%2==1)r = r*x % m;}n>>=1;//(等价n/=2)//不管幂次二进制最低位是否为0都让x加倍,不能else(关键)x=x*x%m;//只要n往右移都要翻倍}return r;
}
//java代码
private static BigInteger my_pow(BigInteger x,BigInteger n,BigInteger m){//x^n%m//BigInteger类是进行大整数运算使用的类BigInteger r = new BigInteger("1");//最终求余结果while(n.compareTo(new BigInteger("0"))==1){if(n.mod(new BigInteger("2")).compareTo(new BigInteger("1"))==0) {//只要幂次最低位为1就可以更新结果r = r.multiply(x).mod(m);}n = n.divide(new BigInteger("2"));x = x.multiply(x).mod(m);}return r;
}

蒙哥马利幂模算法(二分快速幂)相关推荐

  1. a^b%c(蒙格马利快速幂模算法)

     蒙格马利快速幂模算法: 将p按二进制写出来,应该很容易理解.r依次是1,2,4,8,16,32,--次幂的结果.当所在二进制的位为1时,k乘上r.最后返回k. 由x*y%z=(x%z)*y%z ,运 ...

  2. hdu 4549 M斐波那契数列(费马小定理 + 二分快速幂 + 矩阵快速幂)

    M斐波那契数列                                                                           Time Limit: 3000/1 ...

  3. 【算法分析与设计】快速幂算法与快速幂取模算法

    文章目录 快速幂算法 算法分析 算法实现 位运算优化 BigInteger支持 快速幂取模算法 算法优点 算法推导 算法实现 BigInteger支持 本文完整代码实现(Java语言描述) 快速幂算法 ...

  4. 模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)

    1.什么是模幂运算问题 给出a, k, mod 计算ak(%mod)a^k (\%mod)ak(%mod)的值 k是一个非常大的正整数(超过1e7) 附,一个可以提交的地方: leetcode 372 ...

  5. python【数据结构与算法】快速幂and矩阵快速幂取模(看不懂你来打我)

    文章目录 1 解释快速幂 2 代码(这里就不考虑指数为小于0的情况了) 3 下面是矩阵快速幂,区别只是底数换成了矩阵 1 解释快速幂 传统的幂运算,是对底数进行连乘,时间复杂度为o(n),例如:2^1 ...

  6. 大数取模运算,快速幂取模运算

    1.快速幂取模 http://www.cnblogs.com/yinger/archive/2011/06/08/2075043.html 快速幂取模就是在O(logn)内求出a^n mod b的值. ...

  7. (组合数求模=乘法逆元+快速幂) Problem Makes Problem

    题目: As I am fond of making easier problems, I discovered a problem. Actually, the problem is 'how ca ...

  8. RSA密码的手动算法+快速幂算法

    公钥加密方案(非对称加密算法) 1.为什么要引入公钥加密方案? 密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法). 而对称加密方法有一个特点,任何通信 ...

  9. leetcode算法总结 —— 快速幂算法

    文章目录 1. 引出快速幂算法 2. 简化语句 3. 使用位运算来提升性能 4. 对应leetcode题型 参考的是大神的文章,这篇文章相当好 https://blog.csdn.net/qq_197 ...

最新文章

  1. 利用OpenCV求取图像的重心
  2. java线程池的使用
  3. 汇编:转移目的地址在内存中
  4. COGS 930. [河南省队2012] 找第k小的数 主席树
  5. C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(上)
  6. 零基础科普:4种简单推荐算法背后的原理
  7. 红外倒车雷达原理图_斯坦福研究登Nature子刊:芯片实现激光雷达技术,价格低至数百美元...
  8. 各厂商服务器ESXI最高版本适配情况
  9. Android开发学习之路-LruCache使用和源码分析
  10. 思科CCNA考试命令集总结
  11. java报错: 类重复: newemission.calculate_java当中的继承(一)
  12. ubuntu下载BT种子安装qBittorrent
  13. Illegal instruction 问题处理
  14. Only fullscreen opaque activities can request orientation比较完美的解决方法,黑白屏问题解决
  15. web集群之通过tomcat部署jpress应用
  16. 插秧诗 - 退步原来是向前
  17. laravel 笔记
  18. lol服务器位置2017,2017LOL转区系统在哪儿 LOL12月转区系统地址入口
  19. Python爬虫-爬取快看漫画网图片并拼接成漫画长图
  20. Ajax页面缓存问题分析与解决办法

热门文章

  1. Avoid passing null as the view root ;Android
  2. Docker使用普通用户运行
  3. 脚本引流靠谱吗,脚本引流话术连骗子都不如,你怎么引流
  4. 用队列解决击鼓传花算法题
  5. iPhone的恢复模式进入与退出
  6. 使用Atmel Studio开发Arduino的ATmega328P单片机
  7. 分享嵌入式入门学习指导
  8. 算法提高 分解质因数
  9. MySQL安装的第三步出现红叉解决方法
  10. mysql 查询一小时之内的数据