快速幂的两种算法
来源:互联网 发布:手机视频相册制作软件 编辑:程序博客网 时间:2024/05/17 07:43
快速幂是一种在O(logN)的时间复杂度下求出幂的一种方法。
第一种算方法就是对于一个X^N我们可以把N转化成2进制的形式,如X^22 = X^16+X^4+X^2;因为22(二进制:10110) = 16 + 4 + 2;
所以我们可以推到出来这种算法,完整代码如下:
typedef long long ll;ll mod_pow(ll x,ll n,ll mod){ ll res = 1;//记录结果 while(n > 0){ if(n & 1) res = res * x % mod;//判断最后一位是不是一,如果是就乘上这位对应的数。 x = x * x % mod;//把x向左移一位 n >>= 1;//舍弃最后一位,即向右移一位 } return res; }
还有一种算法就是先判断N是奇数还是偶数。如果是偶数满足X^N = (x^2)^(N/2);,如果是奇数满足X^N = (x^2)^(N/2)*X;则不断向下递归即可,终止条件就是N == 0时返回 1;完整代码如下:
typedef long long ll;ll mod_pow(ll x,ll n,ll mod){ if(n == 0) return 1; ll res = mod_pow(x*x%mod,n/2,mod); if(n & 1) res = res*x % mod;//如果最后一位是1,则是奇数。 return res;}
0 0
- 快速幂的两种算法
- 快速排序算法的两种实现
- 快速排序(快排)算法的C++两种实现
- [算法] 两种快速排序的while写法
- 两种快速排序算法性能的比较
- 算法之素数的快速筛选两种方式
- 算法(二):快速排序的两种实现方法
- 两种快速排序算法比较
- 算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描
- 快速排序的两种改进方法算法及topK问题求解
- js实现两种实用的排序算法——冒泡、快速排序
- 两种常用的交换排序算法--冒泡排序、快速排序
- java快速排序算法(数组和list两种方式)
- python实现快速排序算法(两种不同实现方式)
- 快速排序算法——两种写法
- 快速排序的两种实现
- 快速排序的实现两种实现
- 快速排序的两种实现
- 如何对一个大的项目进行模块化编程。
- 虚拟机的安装
- 中间件技术ActiveMQ消息中间件的使用
- 神奇的服务容器
- leetcode[59]Spiral Matrix II
- 快速幂的两种算法
- 控制对文件的访问
- linux中权限的意义
- html:div中加个竖条
- Asp.net GET和POST 请求
- 佛祖保佑,永无BUG
- java面试⑤前端部分
- 数组元素分配的默认值
- P2P,UDP和TCP穿透NAT