Pagini recente » Cod sursa (job #1850025) | Cod sursa (job #198816) | Cod sursa (job #2342388) | Cod sursa (job #806018) | Cod sursa (job #1538587)
#include<cstdio>
using namespace std;
int a,n,n2,i,j;
long long phi,c;
long long ridicarelaputere(long long x,long long b)
{
if(b==0)
return 1;
else if(b%2==0)
return ridicarelaputere((x*x)%n,b/2)%n;
else
return (x*ridicarelaputere(x,b-1))%n;
}
FILE *in,*out;
int main ()
{
in=fopen("inversmodular.in","r");
out=fopen("inversmodular.out","w");
fscanf(in,"%d %d",&a,&n);
phi=n;
n2=n;
for(i=2;i*i<=n2;i++)
if(n2%i==0)
{
phi/=i;
phi=phi*(i-1);
while(n2%i==0)
n2/=i;
}
if(n2!=1)
{
phi/=n2;
phi=phi*(n2-1);
}
c=ridicarelaputere(a,phi-1);
c%=n;
fprintf(out,"%lld",c);
return 0;
}