Cod sursa(job #2097806)

Utilizator arcoC. Nicolae arco Data 1 ianuarie 2018 17:54:41
Problema Algoritmul lui Euclid extins Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <stdint.h>

typedef unsigned int uint;

int ee(int a, int b, int *x, int *y);
void solve(int a, int b, int c, FILE *out);

int main(void)
{
	FILE *in = fopen("euclid3.in", "r");
	FILE *out = fopen("euclid3.out", "w");
	if(in != NULL && out != NULL)
	{
		uint t, i = 0;
		fscanf(in, "%u%*c", &t);
		for(; i < t; i++)
		{
			int a, b, c;
			fscanf(in, "%d%*c%d%*c%d%*c", &a, &b, &c);
			solve(a, b, c, out);
		}

		fclose(in);
		fclose(out);
	}
	else
	{
		printf("Error\n");
	}

	return 0;
}

void solve(int a, int b, int c, FILE *out)
{
	int x, y;
	int d = ee(a, b, &x, &y);
	if(c % d == 0)
	{
		int q = x * (c / d);
		int w = y * (c / d);

		if(a < 0)
		{
			q = -q;
		}
		if(b < 0)
		{
			w = -w;
		}
		fprintf(out, "%d %d\n", q, w);
	}
	else
	{
		fprintf(out, "0 0\n");
	}
}

int ee(int a, int b, int *x, int *y)
{
	if(a == 0)
	{
		*x = 0;
		*y = 1;
		return b;
	}
	else
	{
		int x1, y1;
		int d = ee(b % a, a, &x1, &y1);
		*x = y1 - (b / a) * x1;
		*y = x1;
		return d;
	}
}