Cod sursa(job #2348141)

Utilizator mihaidanielmihai daniel mihaidaniel Data 19 februarie 2019 13:42:15
Problema Algoritmul lui Euclid Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>
using namespace std;

int cmmdc (int x, int y)
{
    if (x == 0 || y == 0) {return 1;}
    if (x < 0) {x*=-1;}
    if (y < 0) {y*=-1;}
    if (x == y) {return x;}
    if (x%2 + y%2 == 0) {return 2 * cmmdc (x/2, y/2);}
    if (x%2 == 0) {return cmmdc (x/2, y);}
    if (y%2 == 0) {return cmmdc (x, y/2);}
    return (x > y) ? cmmdc ((x-y)/2, y) : cmmdc (x, (y-x)/2);
}

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

    int n, i, x, y;
    scanf ("%d", &n);
    for (i = 0; i < n; ++i)
    {
        scanf ("%d%d", &x, &y);
        printf ("%d ", cmmdc (x, y));
    }

    return 0;
}