参考链接:
https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E5%B9%82/5500243?fr=aladdin#1
http://blog.youkuaiyun.com/baidu_20363843/article/details/49559573
位元算:
a^b:
1 2 3 4 5 6 7 8 9 | int pow4(int a,int b){ int r=1,base=a; while(b){ if(b&1) r*=base; //只要最右边的数为0,就不乘 base*=base; //虽说每次要判断加还是不加,但因为每次都向后移了一位, b>>=1; //所以要在原基础上再乘 } return r; } |
|
|
例:a^11
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算
快速幂求模:
引理1:
上面公式为下面公式的引理,即积的取余等于取余的积的取余。
例子:
int powmod(int a,int b,int c)
{
int ans=1;
a=a%c;
while(b)
{
if(b&1) ans=ans*a%c;
b/=2;
a=a*a%c;
}
return ans;
}