Informatică, întrebare adresată de floryion, 8 ani în urmă

Trebuie să definiți trei funcții având următoarele antete:

int NrDiv(int n)
int NextNrDiv(int n)
int PrevNrDiv(int n)
Funcția NrDiv primește ca parametru un număr natural n și returnează numărul divizorilor lui n
Funcția NextNrDiv primește ca parametru un număr natural n și returnează cel mai mic număr natural, strict mai mare decât n, care are același număr de divizori ca și n.
Funcția PrevNrDiv primește ca parametru un număr natural n și returnează cel mai mare număr natural, strict mai mic decât n, care are același număr de divizori ca și n. Dacă acest număr nu există, funcția va returna valoarea -1.

Restricții și precizări
10 ≤ n ≤ 50.000
Puteți să apelați o funcție din altă funcție. Se recomandă ca funcțiile să fie definite în ordinea descrisă mai sus în enunț.

Exemplu
NrDiv(100) = 9, NextNrDiv(100) = 196, PrevNrDiv(100) = 36

Important
Rezolvarea voastră trebuie să conţină definiţiile celor trei funcţii. Prezenţa în soluţie a altor instrucţiuni sau lipsa definiției vreunei funcții poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Ma poate ajuta cineva la ultimele 2 subprograme?


Răspunsuri la întrebare

Răspuns de Daniel4761
2

int NextNrDiv(unsigned int n)

{

int divizori=NrDiv(n), div=0, i;

while(divizori!=div)

{

 n++; div=0;

 for(i=1;i<=n;i++)

  if(n%i==0)

   div++;

}

return n;

}

int PrevNrDiv(unsigned int n)

{

int divizori=NrDiv(n), div=0, i;

while(divizori!=div)

{

 n--; div=0;

 if(!n) return -1;

 for(i=1;i<=n;i++)

  if(n%i==0)

   div++;

}

return n;

}

Alte întrebări interesante