Pagini recente » Monitorul de evaluare | Profil M@2Te4i | Profil dmgciubotaru | Cod sursa (job #2561490) | Cod sursa (job #3136386)
#include <stdio.h>
long long int euclidExtended(long long int a, long long int b, long long int *x, long long int *y) {
if (a == 0) {
*x = 0;
*y = 1;
return b;
}
long long int x1, y1;
long long int cmmdc = euclidExtended(b % a, a, &x1, &y1);
*x = y1 - (b / a) * x1;
*y = x1;
return cmmdc;
}
long long int modInverse(long long int A, long long int N) {
long long int x, y;
long long int cmmdc = euclidExtended(A, N, &x, &y);
if (cmmdc != 1) {
return 0;
}
long long int result = (x % N + N) % N;
return result;
}
int main() {
long long int A, N;
freopen("inversmodular.in", "r", stdin);
freopen("inversmodular.out", "w", stdout);
scanf("%lld %lld", &A, &N);
long long int inverse = modInverse(A, N);
printf("%lld", inverse);
return 0;
}