Pagini recente » Borderou de evaluare (job #656502) | Cod sursa (job #2387901) | Cod sursa (job #982061) | Cod sursa (job #1051707) | Cod sursa (job #2909118)
/*
Invers Modular
*/
#define ll long long int
ll power(ll a, ll b)
{
if (b < 0) return power(1.0 / a, -b);
if (b == 0)
return 1;
ll temp = power(a, b / 2);
ll result = temp * temp;
if (b % 2 == 1)
result *= a;
return result;
}
int phi(int n)
{
int result = n;
int i;
for (i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
while (n % i == 0)
{
n /= i;
}
result -= result / i;
}
}
if (n > 1)
result -= result / n;
return result;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
int A, N;
FILE* f;
f = fopen("inversmodular.in", "rt");
FILE* g;
g = fopen("inversmodular.out", "wt");
fscanf(f, "%d%d", &A, &N);
ll invMod = power(A, phi(N) - 1);
fprintf(g, "%lld", (invMod % N));
fclose(f);
fclose(g);
return 0;
}