您的位置:首页 > 其它

[LintCode]快速幂(数论)

2016-06-08 11:41 190 查看
计算a^n % b,其中a,b和n都是32位的整数。

快速幂搞就过了.快速幂首先就是要知道

(a*b)%c = ((a%c)*b)%c ,所以经过推导得出.

(a^n)%b = ((((a%b)*a)%b)*a)..........%b)*a) %b (n次)

这样只能解决的a^n 超出计算机计数范围,复杂度还是没有降下来呢.

怎么办呢^O^,bit-manipulation!!!!!!

具体详解自行百度好了^_^(利用了二分的思想)

Code:

class Solution {
/*
* @param a, b, n: 32bit integers
* @return: An integer
*/
public int fastPower( int a, int b, int n ) {
Long ret = new Long(1);
long t=0;
t=a;
if(b==1) return a%b;
while(n>0){
if(n%2==1){
ret = (ret*t)%b;
}
n=n>>1;
t=(t*t)%b;
}
return ret.intValue();
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: