Pagini recente » Cod sursa (job #293221) | Cod sursa (job #2335996) | Cod sursa (job #1047096) | Cod sursa (job #2650101) | Cod sursa (job #3250556)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
long long int n, a, x;
long long int lgput(long long int b, long long int e){
if(e==0) return 1;
if(e==1) return b;
if(e%2==0) return lgput(b*b, e/2);
return b*lgput(b*b, e/2);
}
long long int ind_eul(long long int k){
int d=0;
long long int p=1, i;
while(k%2==0){
k/=2;
d++;
}
if(d!=0) p*=lgput(2, d-1);
for(i=3;i*i<=k;i+=2){
d=0;
while(k%i==0){
k/=i;
d++;
}
if(d!=0) p*=(i-1)*lgput(i, d-1);
}
p*=k-1;
return p;
}
int main(){
fin>>a>>n;
x=lgput(a,ind_eul(n)-1);
fout<<x;
return 0;
}