Pagini recente » Cod sursa (job #3211970) | Cod sursa (job #2276007) | Cod sursa (job #2177293) | Cod sursa (job #2678262) | Cod sursa (job #3280696)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("inversmodular.in");
ofstream fout ("inversmodular.out");
int a, N, fi;
int exp_log(int x, int y);
int Phi(int n);
int main()
{
fin>>a>>N;
fi=Phi(N);
fout<<exp_log(a,fi-1);
return 0;
}
int Phi(int n)
{int d;
int fi=1;
for(d=2;d*d<=n;d++)
{if(n%d==0)
{while(n%d==0)
{fi*=d;
n/=d;
}
fi/=d;
fi*=(d-1);
}
}
if(n>1)
fi*=(n-1);
return fi;
}
int exp_log(int x, int y)
{long long int p;
if(y==0)
return 1;
else
if(y%2==1)
return (x*exp_log(x,y-1))%N;
//y%2==0
p=exp_log(x,y/2);
return (p*p)%N;
}