Cod sursa(job #758406)

Utilizator iris88Nagy Aliz iris88 Data 15 iunie 2012 16:38:58
Problema Algoritmul lui Euclid extins Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#include <iostream>
#include <fstream>
#include <list>
#include <limits.h>
#include <stdio.h>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <stdio.h>
#include <algorithm>
#include <deque>
#include <string.h>

using namespace std;

void swap(int &a, int&b)
{
	if (a==b) return;
	a = a^b;
	b = a^b;
	a = b^a;
}
//a>b
void euclid_ext(int a, int b,int &d,int &x, int &y)
{	
	if (b==0){
		d =a;
		x = 1;
		y =0;
	}
	else
	{
		int k = a%b;
		int c = a/b;
		int x0=0,y0=0;
		a=b;
		b=k;
		euclid_ext(a,b,d,x0,y0);
		y = x0-c*y0;
		x = y0;
	}		
}
int main()
{
	FILE* f =  fopen("euclid3.in","r");
	FILE* g = fopen("euclid3.out","w+");
	int T;
	fscanf(f,"%d",&T);
	for (int i=0;i<T;i++)
	{
		int gr = 0;
		int a,b,c,d,x,y;		
		fscanf(f,"%d %d %d", &a,&b, &c);
		if (abs(a)<abs(b)) {swap(a,b);gr=1;}
		euclid_ext(a,b,d,x,y);
		if (c%d ==0)
		{
			x = x*c/d;
			y = y*c/d;
			if (gr) swap(x,y);
			fprintf(g,"%d %d\n",x,y);
		}
		else
			fprintf(g,"0 0\n");
		
	}
	fclose(f);
	fclose(g);
}