Rezolvare completă PbInfo #389 DivizoriPariInterval

Cerinţa

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema DivizoriPariInterval:

#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;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #389 DivizoriPariInterval

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #389 DivizoriPariInterval de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!