fbpx

Problema #389 – DivizoriPariInterval – Rezolvari PBInfo

de Mihai-Alexandru

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.

#include <bits/stdc++.h>
using namespace std;
int main ()
{
    int nrdiv=0,ndmax=0,nrmic,nrmare,a,b,aux;
    cin >> a>> b;
    if(a%2==1)
        a++;
    for (int i=a; i<=b; i=i+2)
    {
        aux=i;
        nrdiv=0;
        for (int d=1;d*d<=aux;d++)
            if(aux%d==0)
        {
              if(d %2==0) nrdiv++;
            if( d*d<aux)
            if((aux/d)%2==0) nrdiv++;
        }
        if(nrdiv>ndmax)
        {
            ndmax=nrdiv;
            nrmic=aux;
        }
    }
    if (b%2==1) b=b-1;
    for (int i=b; i>=a;i=i-2)
    {
         aux=i;
        nrdiv=0;
        for (int d=1;d*d<=aux;d++)
            if(aux%d==0)
        {
            if(d %2==0) nrdiv++;
            if (d*d<aux)
            if((aux/d)%2==0) nrdiv++;
        }
        if(nrdiv==ndmax)
        {
            nrmare=aux;
            break;
        }
    }
    cout << ndmax<<" "<<nrmic<<" "<<nrmare;
    return 0;
}
Comentarii

S-ar putea sa iti placa