Cod sursa(job #983456)

Utilizator helios11radu mihai helios11 Data 11 august 2013 20:35:59
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
int A, N;

void read(){
	freopen("inversmodular.in", "r", stdin);
	scanf("%d", &A);
	scanf("%d", &N);
}

void print(int x){
	
	printf("%d", x);
}

void solve(){
	long long int q, r, t0, t1, t2, N_rezerva;
	N_rezerva = N;
	q = N / A;
	r = N % A;
	t0 = 0;
	t1 = 1;
	t2 = t0 - q*t1;

	if(r == 1){
		//print(1);
		if(t2 > 0)
			print(t2);
		else
			print(N_rezerva + t2);
	}
	
	else{
		//print(0);
		while(r != 1){
			q = N / A;
			r = N % A;
			t2 = t0 - q * t1;
			//print(t2);
			N = A;
			A = r;
			t0 = t1;
			t1 = t2;
			//print(t2);
		}
		if(t2 > 0)
			print(t2);
		else
			print(N_rezerva + t2);
	}
}


void invers_modular(long int n_input, long int b_input){
	long int n, b, q, r, t_i, t_i1, t_i2;
	n = n_input;
	b = b_input;
	r = n % b;
	t_i = 0;
	t_i1 = 1;

	printf("     n     |    b    |    q    |   r    |   t_i   |     t_i1    |      t_i2      |");
	printf("\n---------------------------------------------------------------------------------\n");
	while(r != 1){
		q = n / b;
		r = n % b;
		t_i2 = t_i - q * t_i1;
		printf("     %d     |    %d    |    %d    |   %d    |   %d   |     %d    |      %d      |", n, b, q, r, t_i, t_i1, t_i2);
		printf("\n---------------------------------------------------------------------------------\n");
		n = b;
		b = r;
		t_i = t_i1;
		t_i1= t_i2;
		
	}
}

int main(){
	freopen("inversmodular.out", "w", stdout);

	read();
	//invers_modular(N,A);
	solve();
	return 0;
}