Mai intai trebuie sa te autentifici.
Cod sursa(job #1176243)
Utilizator | Data | 25 aprilie 2014 19:50:57 | |
---|---|---|---|
Problema | Invers modular | Scor | 10 |
Compilator | c | Status | done |
Runda | Arhiva educationala | Marime | 0.68 kb |
#include <stdio.h>
long long phi(long long n)
{
long long p = n;
long long d = 2;
while(n != 1)
{
if(n % d == 0)
{
p = p*(d-1)/d;
while(n % d == 0)
n = n/d;
}
d++;
}
return p;
}
long long power(long long a , long long n)
{
if(n == 0) return 1;
if(n == 1) return a;
if(n % 2 == 0) return power(a*a , n/2);
return a*power(a*a , (n-1)/2);
}
int main()
{
FILE *fin = fopen("inversmodular.in" , "r");
long long a , n;
fscanf(fin , "%lld %lld" , &a , &n);
fclose(fin);
FILE *fout = fopen("inversmodular.out" , "w");
fprintf(fout , "%lld" , power(a , phi(n)-1) % n);
fclose(fout);
return 0;
}