Pagini recente » Cod sursa (job #2262705) | Cod sursa (job #623380) | Clasamentul arhivei de probleme | Cod sursa (job #1549908) | Cod sursa (job #1827674)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int n,m;
inline int Fi(int x)
{
int d=2,fi=x;
while(x>1 && d*d<=x)
{
if(x%d==0)
{
fi=(fi/d)*(d-1);
while(x%d==0)
x/=d;
}
d++;
}
if(x>1)fi=(fi/x)*(x-1);
return fi;
}
inline int Putere(int x,int y)
{
int s=1;
while(y)
{
if(y%2==1)
{
s=(1LL*s*x)%n;
y--;
}
y=y/2;
x=(1LL*x*x)%n;
}
return s;
}
int main()
{
int x;
fin>>m>>n;
x=Fi(n)-1;
///a^(fi(n))%n==1
fout<<Putere(m,x)<<"\n";
return 0;
}