# PBinfo #2247 – NrDiv – Rezolvare C++

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

## Enunț

Se consideră un număr natural N care este par.

Cerința
Să se determine cel mai mic număr natural impar M care are același număr de divizori ca și N.

Date de intrare
Programul citește de la tastatură numărul N.

Date de ieșire
Programul va afișa pe ecran cel mai mic număr natural impar M care are același număr de divizori ca și N.

Restricții și precizări

1 ≤ N ≤ 1 000 000 000 și este par
Se garantează că M va fi mai mic decât 2 000 000 000

Exemplu:
Intrare

360
Ieșire

3465
Explicație
360 are 24 de divizori. Cel mai mic număr impar care are tot 24 de divizori este 3465.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
int t[] = {0, 3,5,7,11,13,17,19,23};
int c[] = {0,15,7,6, 4, 2, 2, 2, 2};
int st[12], n, nrdiv, x;
long long nrImpar;
int d[12];
void Citire()
{
    cin >> x;
}
void NrDivizori()
{
    int i;
    nrdiv = 0;
    for (i = 1; i * i < x; ++i)
        if (x % i == 0) nrdiv += 2;
    if (i * i == x) nrdiv++;
}
inline bool Valid(int top)
{
    d[top] = d[top - 1] * (1 + st[top]);
    if (d[top] <= nrdiv) return true;
    return false;
}
inline int Putt(int a, int k)
{
    int i, x = 1;
    for (i = 1; i <= k; ++i)
        x *= a;
    return x;
}
inline void UpdateSol(int top)
{
    int i;
    long long w = 1;
    for (i = 1; i <= top; ++i)
        w *= Putt(t[i], st[i]);
    nrImpar = min(nrImpar, w);
}
inline void Back()
{
    bool cand;
    int top;
    d[0] = 1;
    top = 1;
    st[top] = 0;
    while (top > 0)
    {
        cand = false;
        while (!cand && st[top] < c[top])
        {
            st[top]++;
            cand = Valid(top);
        }
        if (!cand) top--;
        else if (d[top] == nrdiv) UpdateSol(top);
        else if (top < 8) st[++top] = 0;
    }
}
int main()
{
    nrImpar = 2000000000;
    Citire();
    NrDivizori();
    Back();
    cout << nrImpar << "\n";
    return 0;
}
```

## Resurse

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