快速幂
来源:互联网 发布:东盟共同体 知乎 编辑:程序博客网 时间:2024/06/06 02:38
以下以求a的b次方来介绍[1]
把b转换成二进制数。
该二进制数第i位的权为例如
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算
快速幂可以用位运算这个强大的工具实现
1
b
and
1
{也就是取b的二进制最低位(即第0位) 判断b是否为奇数,是则为1}
1
b
shr
1
{就是去掉b的二进制最低位(即第0位)}
有了这个强大的工具,快速幂就好实现了!
常规求幂
int
pow1(inta,intb)
{
int
r=1;
while
(b--)
r*=a;
return
r;
}
二分求幂(一般)
int
pow2(inta,intb)
{
int
r=1,base=a;
while
(b!=0)
{
if
(b%2)
r*=base;
base*=base;
b/=2;
}
return
r;
}
快速求幂(位操作)
int
pow3(
int
a,
int
b)
{
int
r=1,base=a;
while
(b!=0)
{
if
(b&1)
r*=base;
base*=base;
b>>=1;
}
return
r;
}
快速求幂(位运算,同pow3函数,但更复杂)
int
pow4(
int
x,
int
n)
{
if
(n==0)
return
1;
else
{
while
((n&1)==0)
{
n>>=1;
x*=x;
}
}
int
result=x;
n>>=1;
while
(n!=0)
{
x*=x;
if
((n&1)!=0)
result*=x;
n>>=1;
}
return
result;
}
0 0
- 快速矩阵快速幂
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂&&快速乘法
- 快速幂&快速乘
- 快速幂 快速乘法
- 快速幂 快速幂取模
- 快速幂+快速乘法
- 【快速幂】【快速幂取模】
- 快速乘法-快速幂
- 快速乘/快速幂/矩阵快速幂
- 快速乘 快速幂 矩阵快速幂
- 快速幂,快速幂取模,矩阵快速幂
- 快速幂
- 快速幂
- 快速幂
- 快速幂
- JAVA编程训练——Game: connect four
- android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系
- 《Java虚拟机原理图解》 1.1、class文件基本组织结构
- Python深入:stevedore简介
- 注解的知识总结
- 快速幂
- 委托使用心得
- Mac下同时安装多个版本的JDK
- xcode EditText 软键盘自动退出
- Mysql错误:ERROR 1205 (HY000): Lock wait timeout exceeded解决办法
- Web安全之语法知识补习
- POJ1486 Sorting Slides (二分图求最大匹配)
- SSH端口转发实现代理服务器
- leetcode系列(60)N-Queens, N-Queens II