您的位置:首页 > 其它

快速幂的学习

2016-02-12 15:56 225 查看
计算 S = a^n :

S = a * a * a * a......

= ( ( (a^2)^2)^2)......

n = 2^k1 + 2^k2 + 2^k3......

例如: 22 = 16+4+2 22的二进制数为:10110

那么: a^22 = a^16 * a^4 * a^2

int pow(int a, int n)
{
int res = 1;
while (n > 0)
{
if (n&1)
res = res*a;  //若二进制最低位为1, 则乘以 x*(2^i)
a = a*a;          //将x平方
n >>= 1;
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: