map<ll,ll> map_phi;
ll get_phi(ll n)
{
ll res = n,a = n;
for(ll i = 2;i * i <= n;++i){
if(a % i == 0){
res = res / i * (i - 1);
while(a % i == 0) a /= i;
}
}
if(a > 1) res = res / a * (a - 1);
return res;
}
ll fpow_mod(ll a,ll b,ll mod)
{
ll res = 1;
while(b){
if(b & 1) res = (res * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return res;
}
void init(ll mod)
{
while(mod != 1){
map_phi[mod] = get_phi(mod);
mod = map_phi[mod];
}
map_phi[1] = 1;
}
欧拉定理:
所以对于高位的取模,我们可以用欧拉公式来降幂(根据欧拉公式将满足欧拉公式的部分转化成1,即可进行降幂操作)