Pagini recente » Cod sursa (job #2673324) | Cod sursa (job #1860038) | Cod sursa (job #2133478) | Cod sursa (job #1696962) | Cod sursa (job #2141770)
#include <fstream>
#define LL long long
using namespace std;
ifstream fi("inversmodular.in");
ofstream fo("inversmodular.out");
LL a,n;
LL getPhi(LL x)
{
LL rez=x;
for (int i=2; 1LL*i*i<=x; i++)
{
if (x%i==0)
{
rez=(rez/i)*(i-1);
while (x%i==0)
x/=i;
}
}
if (x!=1)
rez=(rez/x)*(x-1);
return rez;
}
LL logExp(LL b,LL e,LL M)
{
/// calculeaza (b^e)%M
LL rez=1,p=5;
for (int i=0; (e>>i)>0; i++)
{
if ((e>>i)&1)
{
rez=(rez*p)%M;
}
p=(p*p)%M;
}
return rez;
}
int main()
{
fi>>a>>n;
LL phi=getPhi(n);
//fo<<phi;
/// rezultatul este: (a^(phi-1))%n
LL ans=logExp(a,phi-1,n);
fo<<ans;
return 0;
}