# PBinfo #3612 – F_p-numar_bac – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Un număr natural nenul se numește p-număr dacă are aceeași paritate cu suma divizorilor săi pozitivi. Exemplu: 10 și 25  sunt p-numere (10  are  aceeași  paritate  cu 18=1+2+5+10,  iar 25  are  aceeași paritate cu 31=1+5+25).

Cerința
Subprogramul kpn, are trei parametri, a, b și k, în această ordine, prin care primește câte un număr natural din intervalul [1,105]  (a≤b).  Subprogramul  returnează  cel  de  al k-lea  p-număr  din  intervalul [a,b]  sau -1,  dacă nu există cel puțin k astfel de numere în acest interval.

Scrieți definiția completă a subprogramului.

Exemplu:
Dacă a=27, b=50 și k=3, atunci subprogramul returnează 34.

Important
Soluția propusă va conține definiția funcției cerute. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.

## Cod sursă C++

```cpp
int kpn(int a, int b, int k) {
    int contor = 0, i, d;
    if (a == 1) {
        contor = contor + 1;
        i = a + 1;
    } else i = a;
    bool paritate, adv = false;
    for (; i <= b && !adv; ++i) {
        if (i % 2 == 0) paritate = false;
        else paritate = true;
        for (d = 2; d * d < i; ++d)
            if (i % d == 0) {
                if (d % 2 == 1) paritate = !paritate;
                if (i/d % 2 == 1) paritate = !paritate;
            }
        if (d * d == i)
        if (d % 2 == 1)
            paritate = !paritate;
        if ((i % 2 == 0) == paritate) {
            contor = contor + 1;
            if (contor == k) adv = true;
        }
    } if (adv) return i - 1;
    else return -1;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3612)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3612/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3612/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
