Pagini recente » Cod sursa (job #2944986) | Cod sursa (job #1892210) | Cod sursa (job #2683641) | Cod sursa (job #850753) | Cod sursa (job #3184303)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int x, n;
int fi=1;
int p, d, cn, pr;
long long expon(long long a, long long y) {
if (y==1) return a;
if (y%2==0) return (expon(a, y/2)*expon(a, y/2))%n;
else return (a*expon(a, y/2)*expon(a, y/2))%n;
}
int main()
{
fin>>x>>n;
cn=n;
d=2;
while (d*d<=cn) {
p=0;
pr=1;
while (cn%d==0) {
cn/=d;
p++;
pr*=d;
}
if (p>0) fi*=(pr/d)*(d-1);
d++;
}
if (cn>1) fi*=(cn-1);
fout<<expon(x, fi-1);
return 0;
}