452
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.000b-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