标签:its inf mat std har printf res red clu
[题目链接] https://www.luogu.org/problemnew/show/P5091
\(a^b\ mod\ m\)
\(1≤a≤10^9\)
\(1≤b≤10^{20000000}\)
\(1≤m≤10^6\)
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#include<tr1/unordered_map>
using namespace std;
typedef long long LL;
const int INF=1e9+7;
inline LL read(){
register LL x=0,f=1;register char c=getchar();
while(c<48||c>57){if(c==‘-‘)f=-1;c=getchar();}
while(c>=48&&c<=57)x=(x<<3)+(x<<1)+(c&15),c=getchar();
return f*x;
}
inline LL read_mod(LL p){
register LL x=0;register char c=getchar();
while(c<48||c>57)c=getchar();
while(c>=48&&c<=57)x=((x<<3)+(x<<1)+(c&15))%p,c=getchar();
if(x==0) x=p;
return x;
}
inline LL phi(LL n){
LL res=n;
for(LL i=2;i*i<=n;i++){
if(n%i==0){
res=res/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n>1) res=res/n*(n-1);
return res;
}
inline LL qpow(LL a,LL b,LL p){
LL res=1;
while(b){
if(b&1) (res*=a)%=p;
(a*=a)%=p;
b>>=1;
}
return res;
}
LL a,mod,p,b;
int main(){
a=read(),mod=read();
a%=mod;
p=phi(mod);
b=read_mod(p);
printf("%lld\n",qpow(a,b,mod));
}
标签:its inf mat std har printf res red clu
原文地址:https://www.cnblogs.com/lizehon/p/10423820.html