Zadanie ze SPOJa - gra euklidesa - przekraczanie limitu czasowego

0

Mam 'problem' z pewnym zadaniem a mianowicie : http://pl.spoj.com/problems/EUCGAME/
Wynik jest poprawny, niestety w 3 próbie dostaje "przekroczyłeś limit czasowy"
Wyniki się zgadzają, porównywałem na testach na forum spoja. Nie wiem co mogę jeszcze zrobić, aby lepiej ogarnąć ten algorytm euklidesa.

#include <iostream>
using namespace std;

int main()
{
    unsigned long long a, b;
    unsigned l_tests = 0;
    cin >> l_tests;
    while(l_tests)
    {
        cin >> a >> b;

        while(a != b)
        {
            if(a >b)a -= b;
            else b -= a;
        }
        cout << a+b << "\n";
        l_tests--;
    }
    cin.sync();
    cin.get();
    return 0;
}

Zastanawiam się nad próbą z modulo, bo aktualnie 3 poprawki robiłem i za każdym razem 10/15 pkt [gdyż w 3ciej próbie przekraczam czas o 0.1s]
Jakieś propozycje, błędy odnośnie kodu ?

0

Sprobuj zmienic wczytywanie i wypisywanie na szybsze, bo sposob rozwiazania masz taki jak ja widze. Do tego mam wyrzucone pare przypadkow skrajnych przez sprawdzenie ifem i wyrzucenie od razu odpowiedzi. Po tych zabiegach zbilem z 1.01 do 0.83 ;p no ale wazne ze zaliczylo, juz bardziej nie optymalizowalem.

W petli wystarczy zapisac while(l_tests--) krotsze ;)

0

Zastąp odejmowanie - resztą z dzielenia.

0

Dzięki Panowie za pomoc :) Działa, 15 pkt zaliczone !
Nie będę tutaj dawać konkretnego kodu, bo to nikomu nie pomoże, w tej sytuacji faktycznie lepiej zastosować modulo niż odejmowanie..
Algorytm :
user image

1 użytkowników online, w tym zalogowanych: 0, gości: 1