Cod sursa(job #144327)

Utilizator devilkindSavin Tiberiu devilkind Data 27 februarie 2008 14:04:22
Problema Algoritmul lui Euclid Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <stdio.h>
#define MAX 2000000000

long long a,b,c,x,y,k1,k2,d,t;

void gcd(long long a1, long long b1, long long &x, long long &y, long long &d)
{
	long long x0,y0;
	if (b1==0)
		{
			x=1;
			y=0;
			d=a1;
		}
		else
		{
			gcd(b1,a1%b1,x0,y0,d);
			x=y0;
			y=x0 - (a1/b1)*y0;
		}
}

void solve()
{

	scanf("%lld %lld %lld",&a,&b,&c);

	gcd(a,b,x,y,d);

	if (c%d) {printf("0 0\n");return;}
        printf("%lld %lld\n",x*(c/d),y*(c/d));return;
	k1=b/x;
	k2=a/y;

	x=x*(c/d);
	y=y*(c/d);

	if (x>MAX) {
		t= (x - MAX) / k1 + 1;
		y=y+t*k2;
		x=x - t * k1;
		printf("%lld %lld\n",x,y);
		return;
		}
		else
		if (y>MAX)
			{
			t= ( y- MAX) / k2 + 1;
			y=y-t*k2;
			x=x+t*k1;
			printf("%lld %lld\n",x,y);
			return;
			}
			else 
				if (x<-MAX)
				{
				t= (-x - MAX) / k1 + 1;
				x=x+t*k1;
				y=y-t*k2;
				printf("%lld %lld\n",x,y);
				return;
				}
				else 
				if (y<-MAX)
				{
				t= (-y - MAX) / k2 + 1;
				y=y+t*k2;
				x=x-t*k1;
				printf("%lld %lld\n",x,y);
				return;
				}
	printf("%lld %lld\n",x,y);
	return;
}

int main()
{
	freopen("euclid2.in","r",stdin);
	freopen("euclid2.out","w",stdout);

	long int T;

        scanf("%lld %lld",&a,&b);

        gcd(a,b,x,y,d);
        printf("%lld",d);

        return 0;
}