Pagini recente » Cod sursa (job #658269) | Istoria paginii runda/summer_camp_6/clasament | Simulare 27 | Cod sursa (job #551732) | Cod sursa (job #1915153)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int a,n;
inline int Fi(int x)
{
int fi,i,d;
fi=x;
d=2;
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 Lgput(int x,int y)
{
int s=1;
while(y)
{
if(y%2)
s=1LL*s*x%n;
y/=2;
x=1LL*x*x%n;
}
return s;
}
int main()
{
int x;
fin>>a>>n;
x=Fi(n)-1;
fout<<Lgput(a,x)<<"\n";
fin.close();
fout.close();
return 0;
}