Răspuns :
Solutia asta are 100p. Ceea ce fac in cod e destul de simplu: iau numere de la 1 la n, daca numarul lor de divizori e mai mare (nu "mai mare sau egal" pentru ca vrem numarul MINIM cu un numar maxim de divizori - "se va afișa cel mai mic dintre ele.") decat maximul precedent modific maximul si continui.
Ca sa fie mai rapid totul, nu calculez numarul de divizori pana la n sau n/2, ci pana la sqrt(n), iar asta nu afecteaza comparatiile (pentru ca toate numerele de divizori vor fi mai mici, nu doar cateva). Daca as fi avut nevoie de valoare lor exacta (deci nu doar pentru a verifica daca nrDiv(a) >b) nu as fi facut asa, dar pentru ca nu e nevoie am ales varianta asta ceva mai rapida.
#include <iostream>
using namespace std;
// Numarul de divizori pana la sqrt(n), pentru eficienta
int nrDiv(int n)
{
int nr = 0;
for (int i=2; i*i <= n; i++)
if (n%i == 0)
nr ++;
return nr;
}
int main()
{
/**
* maxDiv = numarul de divizori maxim
* maxNr = numarul cu maxDiv divizori, care va fi afisat
*/
int n, maxDiv = 1, maxNr = 1;
cin >> n;
for (int i=1; i<=n; i++)
{
// Ca sa nu il calculam de doua ori
int nr = nrDiv(i);
if (nr > maxDiv)
{
maxDiv = nr;
maxNr = i;
}
}
cout << maxNr;
return 0;
}
Ca sa fie mai rapid totul, nu calculez numarul de divizori pana la n sau n/2, ci pana la sqrt(n), iar asta nu afecteaza comparatiile (pentru ca toate numerele de divizori vor fi mai mici, nu doar cateva). Daca as fi avut nevoie de valoare lor exacta (deci nu doar pentru a verifica daca nrDiv(a) >b) nu as fi facut asa, dar pentru ca nu e nevoie am ales varianta asta ceva mai rapida.
#include <iostream>
using namespace std;
// Numarul de divizori pana la sqrt(n), pentru eficienta
int nrDiv(int n)
{
int nr = 0;
for (int i=2; i*i <= n; i++)
if (n%i == 0)
nr ++;
return nr;
}
int main()
{
/**
* maxDiv = numarul de divizori maxim
* maxNr = numarul cu maxDiv divizori, care va fi afisat
*/
int n, maxDiv = 1, maxNr = 1;
cin >> n;
for (int i=1; i<=n; i++)
{
// Ca sa nu il calculam de doua ori
int nr = nrDiv(i);
if (nr > maxDiv)
{
maxDiv = nr;
maxNr = i;
}
}
cout << maxNr;
return 0;
}
Vă mulțumim că ați ales să vizitați site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți alte întrebări sau aveți nevoie de asistență suplimentară, nu ezitați să ne contactați. Vă așteptăm cu drag să reveniți și nu uitați să ne salvați în lista de favorite!