Pagini recente » Cod sursa (job #1371197) | Cod sursa (job #2911347) | Cod sursa (job #1442071) | Cod sursa (job #1839605) | Cod sursa (job #2909415)
#include <stdio.h>
int expo(int x, int n, int mod)
{
if(n == 0)
return 1;
int aux = 1;
unsigned long long int p;
while(n > 0)
{
if(n%2)
{
p=((unsigned long long int)aux%mod)*((unsigned long long int)x%mod);
aux=p%mod;
}
p=((unsigned long long int)x%mod)*((unsigned long long int)x%mod);
x=p%mod;
n=n/2;
}
return aux;
}
int phi(int n)
{
int rez=n;
for(int i=2; i*i<=n; ++i)
{
if(n%i==0)
{
while(n%i==0)
n/=i;
rez-=rez/i;
}
}
if(n>1)
rez-=rez/n;
return rez;
}
main()
{
FILE *fin=fopen("inversmodular.in", "r");
FILE *fout=fopen("inversmodular.out", "w");
int A, N;
fscanf(fin,"%d %d", &A, &N);
fprintf(fout,"%d %d", expo(A, phi(N)-1, N));
}