fbpx

Problema #2830 – DivImpar – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Subprogramul DivImpar are doi parametri, a și b, prin care primește două numere naturale din intervalul [1,105]. Subprogramul returnează cel mai mare divizor comun impar al numerelor a și b.

Scrieți definiția completă a subprogramului.

Exemplu

Dacă a=30 și b=60, subprogramul returnează valoarea 15.

Important

Soluția propusă va conține definiția subprogramului cerut. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.

int DivImpar(int a , int b)
{
    while(b)
    {
        int r = a % b;
        a = b;
        b = r;
    }
    if(a % 2 == 1)
        return a;
    else
    {
        int maxi = 0;
        for(int d = 1 ; d * d <= a ; ++d)
        {
            if(a % d == 0)
            {
                if(d >= maxi && d % 2 == 1)
                    maxi = d;
                if(a/d >= maxi && (a / d) % 2 == 1)
                    maxi = a/d;
            }
        }
        return maxi;
    }
}
Comentarii

S-ar putea sa iti placa