P5091 模板欧拉定理
Posted lizehon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P5091 模板欧拉定理相关的知识,希望对你有一定的参考价值。
[题目链接] 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
",qpow(a,b,mod));
}
以上是关于P5091 模板欧拉定理的主要内容,如果未能解决你的问题,请参考以下文章