Cod sursa(job #1514857)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 31 octombrie 2015 18:46:28
Problema Algoritmul lui Euclid Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>

using namespace std;

int gcd(int a, int b)
{
    if (!a || !b)
        return a + b;

    if (a == b)
        return a;

    if (~a & 1)
    {
        if (~b & 1)
            return 2 * gcd(a >> 1, b >> 1);
        else
            return gcd(a >> 1, b);
    }
    else
    {
        if (~b & 1)
            return gcd(a, b >> 1);
    }

    if (a > b)
        return gcd((a - b) >> 1, b);
    else
        return gcd((b - a) >> 1, a);
}

int main()
{
    ifstream in("euclid2.in");
    ofstream out("euclid2.out");

    int T, a, b;

    in >> T;

    while (T--)
    {
        in >> a >> b;
        out << gcd(a, b) << "\n";
    }

    return 0;
}