快速幂取模
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
/*
mod性质
(a+b)%m=(a%m+b%m)%m
(a-b)%m=(a%m-b%m+m)%m "+m"是为了防止(a%m-b%m(<0))%m
(a*b)%m=(a%m*b%m)%m
*/
ll quickpowmod(ll a, ll b, ll mod) {//a^b%mod
if (!b) return 1 % mod;//b==0的情况,牛客(a^b)不加这行wa
ll ans = 1;
while (b) {
if (b & 1) //&运算判断奇偶比%快
ans = ans * a % mod;
a = a * a % mod;
//当a很大时,a*a可能爆,可改为:
//a = (a % mod * (a % mod)) % mod;
//例:UVA-11582
b >>= 1;
}
return ans;
}
大整数取模
ull bigintmod(string s, int mod) {
int l = s.size();
ull ans = 0;
for (int i = 0; i < l; i++)
ans = ((ans * 10 + s[i] - '0') % mod);
//证明:1234%mod=((((0*10+1)*10+2)*10+3)*10+4)%mod
return ans;
}