Cod sursa(job #593428)

Utilizator qwertyuPeter Eke qwertyu Data 2 iunie 2011 18:10:01
Problema Algoritmul lui Euclid extins Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#define _CRT_SECURE_NO_DEPRECATE

#include <stdio.h>
#include <stdlib.h>

int gdc(int a, int b);
int euclid(int a, int b, int *d, int *x, int *y);

int main()
{
	FILE * fi = fopen("euclid3.in","r");
	FILE * fo = fopen("euclid3.out","w");
	
	int a,b,c,d,n;
	fscanf(fi,"%d",&n);
	
	while (n--)
	{
		fscanf(fi,"%d%d%d",&a,&b,&c);
		int x,y;
		euclid(a,b,&d,&x,&y);
		if (c%d == 0)
		{
			fprintf(fo,"%d %d \n",x * (c/d),y * (c/d));
		}
		else 
		{
			fprintf(fo,"%d %d \n",0,0);
		}
	
		//printf("%d * x + %d * y; d=%d; c=%d; %d;\n",a,b,d,c,(a+b)/c);
	}
	//system("pause");

	fclose(fi);
	fclose(fo);
	return 0;
}

int gdc(int a, int b)
{
	if (b != 0) 
		return gdc(b,a % b);
	else return a;
}

int euclid(int a, int b, int *d, int *x, int *y)
{
	if (b == 0)
	{
		*d = a;
		*x = 1; 
		*y = 0;
	} else
	{
		int x0,y0;
		euclid(b, a % b, d, &x0, &y0);
		*x = y0;
		*y = x0 - (a / b) * y0;
	}
	return *d;
}