1,首先介绍一下快速幂算法,简单来说就是给一个数a,求a的b次方,因为b的值特别大,比如说3^19999,这个时候就需要用快速幂来计算,基本上快速幂都会对应一个mod p运算,所以一个非常重要的性质就是 a*b %p=(a%p)*(b%p).
2,快速幂算法核心
int fun(int a, int b,int p) { int ans = 1; while (a&&b) { if (b & 1) ans = ((ans*a) % p) % p; a = (a*a) % p; b >>= 1; //移位运算,右移一位 } return ans; }3,算法理解:其实整个算法的实现是将b化成2进制来计算的,就比如说a是2,b是9,9的二进制为1001,2^9=2^8*2^1就是所有为1的位相乘。