Cod sursa(job #1476484)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 25 august 2015 10:55:01
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>

#define infile "valuare.in"
#define outfile "valuare.out"

using namespace std;

ifstream fin(infile);
ofstream fout(outfile);

void euclid(long long a, long long b, long long &x, long long &y) {

	if (!b) {

		x = 1, y = 0;

		return;

	}

	long long xa, ya;

	euclid(b, a % b, xa, ya);

	x = ya;

	y = xa - (a / b)*ya;

}

long long invers(long long a, long long MOD) {

	long long x, y;

	euclid(MOD, a, y, x);

	while (x < 0)
		x += MOD;

	x %= MOD;

	return x;

}

int main() {

	long long b;

	int p;

	fin >> b >> p;

	long long solution = 1, temp = b % p;

	long long exponent = b;

	while (exponent) {

		if (exponent & 1) {

			solution = (solution * temp) % p;

		}

		temp = (temp * temp) % p;

		exponent >>= 1;

	}

	int bb = b % p;

	solution = (solution + p - (bb * bb) % p + bb + p - 1) % p;

	bb = (bb + p - 1) % p;

	solution *= invers((bb * bb) % p, p);

	solution %= p;

	fout << solution;

	return 0;

}

//Trust me, I'm the Doctor!
//Miriam e tare!