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