DivizoriPariInterval

Se citesc două numere naturale a și b. Să se determine cel mai mic și cel mai mare număr din intervalul [a,b] cu număr maxim de divizori pari şi numărul maxim de divizori pari.

Date de intrare

Programul citește de la tastatură numerele a b.

Date de ieşire

Programul afișează pe ecran numerele NRD MIN MAX, separate prin exact un spațiu , reprezentând numărul maxim de divizori pari ai numerelor din [a,b], cel mai mic şi respectiv cel mai mare număr din interval cu număr maxim de divizori pari.

Restricţii şi precizări

  • 0 < a < b < 1.000.000.000
  • b-a ≤ 1000

Exemplu

Intrare

10 20

Ieșire

4 12 20

Explicație

Numărul maxim de divizori pari pentru numerele din intervalul [10,20] este 4. Numerele din interval cu 4 divizori pari sunt 12, 16 şi 20.

#include <iostream>
using namespace std;

int main(){
    int d, a, b, nrdivmax=-1, max ,min, cc;
    int C = 0;
    cin >> a >> b;
    if(a%2==1)
        a++;
    for(int n=a;n<=b;n+=2){
        C = 0;
        int d2 = 0;
        int m = n;
        while(m%2 == 0)
            m /= 2, d2++;
        for(d=1 ; d*d<m ; d+=2)
            if(n % d == 0)
                C +=2;
        if(d * d == n)
            C ++;
        C *= d2;
        //cout << n << " ... " << C << endl;
        if(C>nrdivmax)
            nrdivmax = C, min = max = n, cc = 1;
        else
            if(C == nrdivmax)
                max = n, cc++;
    }
    cout << nrdivmax << " " << min << " " << max;
    //cout << endl << cc;
    return 0;
}