Cod sursa(job #1756819)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 13 septembrie 2016 18:02:08
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <fstream>
using namespace std;

long long put(long long a, long long p, long long mod)
{
	if (p == 0)
		return 1;
	long long n = put(a, p / 2, mod);
	n *= n;
	n %= mod;
	if (p & 1)
		n *= a;
	return (n % mod);
}

int main()
{
	int a, b;
	ifstream in("inversmodular.in");
	ofstream out("inversmodular.out");
	in >> a >> b;
	int phi = 1;
	for (int i = 2; i * i <= b; i++) {
		if (b % i == 0) {
			phi *= i - 1;
			b /= i;
			while (b % i == 0) {
				phi *= i;
				b /= i;
			}
		}
	}
	if (b != 1)
		phi *= b - 1;
	out << put(a, phi - 1, b);
	return 0;
}