Cod sursa(job #1449509)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 9 iunie 2015 21:04:47
Problema Invers modular Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.52 kb
#include <fstream>
#include <tuple>
#include <utility>
using namespace std;

using num = long long;

// ax + by = g
// ax - (a/b)bx + by + (a/b)bx = g
// (a - (a/b)b)x + b(y + (a/b)x) = g

tuple<num, num> euclid_extins(num a, num b){
	if(b == 0){
		return make_tuple(1, 0); }
	else{
		num x1, y1;
		tie(y1, x1) = euclid_extins(b, a%b);
		return make_tuple(x1, y1 - (a/b) * x1); } }

int main(){
	ifstream f("inversmodular.in");
	ofstream g("inversmodular.out");
	num a, b;
	f >> a >> b;
	g << get<0>(euclid_extins(a, -b));
	return 0; }