Cod sursa(job #2910204)

Utilizator radu.seitanSeitan Radu-Catalin radu.seitan Data 18 iunie 2022 18:33:59
Problema Invers modular Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <stdlib.h>

int N = 0, A = 0;

int Putere(int A, int n)
{
	int P = 1;
	while (n)
	{
		if (n % 2 == 1)
			P = (P * A) % N;
		A = (A * A) % N;
		n /= 2;
	}
	return P;
}


int phi(int n)
{
	int result = n;
	for (int 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;
}


int main()
{
	FILE* f = fopen("inversmodular.in", "r"), * g = fopen("inversmodular.out", "w");
	int valoare_functiei_phi = 0, rezultat = 0;

	fscanf(f, "%d", &A);
	fscanf(f, "%d", &N);

	valoare_functiei_phi = phi(N);

	rezultat = Putere(A, valoare_functiei_phi - 1) % N;
	fprintf(g, "%d", rezultat);

	fclose(f);
	fclose(g);

	return 0;
}