Informatică, întrebare adresată de teo34, 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ț.

Răspunsuri la întrebare

Răspuns de boiustef
4

int NrDiv(int n)

{

 int d=0, j;

 for (j=1; j*j<n; ++j)

       if (n%j==0) d+=2;

 if (j*j==n) ++d;

 return d;

}

int NextNrDiv(int n)

{

   int m=n+1;

   while (NrDiv(n)!=NrDiv(m)) ++m;

   return m;

}

int PrevNrDiv(int n)

{

    int m=n-1;

    while (NrDiv(n)!=NrDiv(m) && m>=0) { --m; }

    return m;

}

Alte întrebări interesante