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.
Răspunsuri la întrebare
Răspuns de
32
#include <iostream>
#define INF 2147000000
using namespace std;
int d, a, b, nrdivmax=-INF, maxx ,minn, nr, nrd, n, d2, m;
int main()
{
cin >> a >> b;
if(a%2==1)
a++;
for(n=a; n<=b; n=n+2)
{
nrd = 0;
d2 = 0;
m = n;
while(m%2 == 0)
m = m / 2, d2++;
for(d=1 ; d*d<m ; d = d + 2)
if(n % d == 0)
nrd = nrd + 2;
if(d * d == n)
nrd ++;
nrd = nrd * d2;
if(nrd>nrdivmax)
nrdivmax = nrd, minn = maxx = n;
else
if(nrd == nrdivmax)
maxx = n;
}
cout << nrdivmax << " " << minn << " " << maxx;
return 0;
}
#define INF 2147000000
using namespace std;
int d, a, b, nrdivmax=-INF, maxx ,minn, nr, nrd, n, d2, m;
int main()
{
cin >> a >> b;
if(a%2==1)
a++;
for(n=a; n<=b; n=n+2)
{
nrd = 0;
d2 = 0;
m = n;
while(m%2 == 0)
m = m / 2, d2++;
for(d=1 ; d*d<m ; d = d + 2)
if(n % d == 0)
nrd = nrd + 2;
if(d * d == n)
nrd ++;
nrd = nrd * d2;
if(nrd>nrdivmax)
nrdivmax = nrd, minn = maxx = n;
else
if(nrd == nrdivmax)
maxx = n;
}
cout << nrdivmax << " " << minn << " " << maxx;
return 0;
}
MadalinaMadutaa:
Multumesc!
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă