Rezolvare completă PbInfo #2663 Divisors

Cerința

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Divisors :

int NrDiv(int n)
{
    int i, nrd = 0;
    for (i = 1; i * i < n; i++)
        if (n % i == 0) nrd += 2;
    if (i * i == n) nrd++;
    return nrd;
}

int NextNrDiv(int n)
{
    int i, nrD;
    nrD = NrDiv(n);
    while (1)
    {
        n++;
        i = NrDiv(n);
        if (i == nrD) return n;
    }
    return -1;
}

int PrevNrDiv(int n)
{
    int i, nrD;
    nrD = NrDiv(n);
    while (n > 1)
    {
        n--;
        i = NrDiv(n);
        if (i == nrD) return n;
    }
    return -1;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2663 Divisors

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2663 Divisors de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!