Cod sursa(job #2718147)

Utilizator TrainingArcAndrei Slav TrainingArc Data 8 martie 2021 15:25:36
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.58 kb
#include <fstream>
#define ll long long

int n, k;

int prod(int a, int b) { return (1ll*a*b)%k; }

int putlog(int n, int k) {
	if(k==0) return 1;
	int x = putlog(n, k/2);
	if(k%2==0) return prod(x, x);
	return prod(n, prod(x, x));
}

int calcphi(int n) {
	ll ans = n;
	for(int i=2;i*i<=n;i++)
		if(!(n%i)){
			while(!(n%i)) n/=i;
			ans = ans/i*(i-1);
		}
	if(n!=1) ans = ans/n*(n-1);
	return ans;
}

int main() {
	std::ifstream fin("inversmodular.in");
	std::ofstream fout("inversmodular.out");
	fin>>n>>k;
	int phi = calcphi(k);
	fout<<putlog(n, phi-1);
}