Cod sursa(job #1182405)

Utilizator MarianMMorosac George Marian MarianM Data 6 mai 2014 12:32:21
Problema Invers modular Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <fstream>
using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");

int A, N, CN, phiN;
int i, bin[33], c;
long long d;

int main(){
	double phi;

	fin >> A >> N;
	phiN = N;
	CN = N;
	phi = phiN;
	for (i = 2; i <= CN; i++){
		if (!(CN%i)){
			phi *= i - 1;
			phi /= i;
			while (!(CN%i)) CN /= i;
		}
	}
	
	i = 0;
	phiN = int(phi) - 1;
	while (phiN) { bin[i++] = phiN % 2; phiN /= 2; }

	c = 0;
	d = 1;
	for (i = i - 1; i >= 0; i--){
		c = 2 * c;
		d = (d*d) % N;
		if (bin[i]){
			c++;
			d = (d*A) % N;
		}
	}

	fout << d;

	return 0;
}