Pagini recente » Cod sursa (job #893656) | Cod sursa (job #1851009) | Cod sursa (job #638097) | Cod sursa (job #1255235) | Cod sursa (job #1810618)
#include <fstream>
#define tip long long
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
tip a,n,m,i,k,p[40],MOD,putere(tip,tip);
int main()
{
f>>a>>n;
m=n;MOD=n;
if(m%2==0)
{
k++;
p[k]=2;
while(m%2==0)
m/=2;
}
for(i=3;i*i<=m;i+=2)
if(m%i==0)
{
k++;
p[k]=i;
while(m%i==0)
m/=i;
}
if(m>1)
k++,p[k]=m;
for(i=1;i<=k;i++)
n=n/p[k]*(p[k]-1);
n--;
g<<putere(a,n);
return 0;
}
tip putere(tip b,tip e)
{
tip r=1;
while(e)
{
if(e%2)
r=(r*b)%MOD;
b=(b*b)%MOD;
e/=2;
}
return r;
}