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