引入
- 编程竞赛有相当一部分题目的结果过于庞大,整数类型无法存储,往往只要求输出取模的结果。
- 例如(a+b)%p,若a+b的结果我们存储不了,再去取模,结果显然不对,我们为了防止溢出,可以先分别对a取模,b取模,再求和,输出的结果相同。
- a mod b表示a除以b的余数。有下面的公式:
- (a + b) % p = (a%p + b%p) %p
- (a - b) % p = ((a%p - b%p) + p) %p
- (a * b) % p = (a%p)*(b%p) %p
- 注意对于除法取模,我们不能直接分别取模了,详见逆元。
快速幂取模
typedef long long LL;
LL pow_mod(LL a,LL b,LL p){
//快速幂取模
LL ans=1,base=a;
while(b>0){
if(b&