Cod sursa(job #3001535)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 13 martie 2023 19:03:28
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <cmath>
#include <climits>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <bitset>
#include <map>
#include <cstring>
#include <algorithm>

#define NMAX 50003

using namespace std;

FILE* fin, * fout;

int a, mod;

long long int putere(long long baza,long long put)
{
	long long int sol = 1;
	while (put > 0)
	{
		if (put % 2 == 1)
		{
			sol *= baza;
			sol %= mod;
		}
		baza = (baza * baza)%mod;
		put /= 2;
	}
	return sol;
}

int nrNumerePrime(int nr)
{
	//calculez phi din asta(nr numere prime relativ la numarul meu)
	long long int sol = nr;
	for (int i = 2; i * i <= nr; i++)
	{
		if (nr % i == 0)
		{
			sol = sol * (i - 1) / i;
			while (nr % i == 0)
			{
				nr /= i;
			}
		}
	}
	if (nr > 1)
	{
		sol = sol * (nr - 1) /nr;
	}
	return sol;
}

int main()
{
	fin = fopen("lgput.in", "r");
	fout = fopen("lgput.out", "w");
	
	fscanf(fin, "%d %d", &a,&mod);
	fprintf(fout, "%lld", putere(a, nrNumerePrime(mod)-1));
	return 0;
}