扩展欧拉定理降幂
Posted thusloop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展欧拉定理降幂相关的知识,希望对你有一定的参考价值。
//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define pii pair<int,int>
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int getphi(int n)
{
int ans=n;
for(int i=2; i*i<=n; i++)
{
if(n%i==0)
{
ans=ans/i*(i-1);
while(n%i==0)n=n/i;
}
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
int qpow(int a,int b,int mod)
{
int ans=1;
a=a%mod;
while(b)
{
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b=b>>1;
}
return ans%mod;
}
signed main()
{
int a,m;
string b;
cin>>a>>m;
cin>>b;
int c=0;
int phi=getphi(m);
bool fg=0;
for(int i=0; i<b.size(); i++)
{
c=c*10+b[i]-'0';
if(c>=phi)fg=1;// >=时要加上phi
c=c%phi;
}
int ans=0;
if(fg)ans=qpow(a,c+phi,m);
else ans=qpow(a,c,m);
cout<<ans<<"\\n";
}
以上是关于扩展欧拉定理降幂的主要内容,如果未能解决你的问题,请参考以下文章