# PBinfo #2777 – Bomboane4 – Rezolvare C++

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

## Enunț

Într-o cutie sunt n bomboane. 
Dacă se împart cele n bomboane în mod egal la un grup de p copii, rămân p-1 bomboane.
Dacă se împart cele n bomboane în mod egal la un grup de q copii, rămân q-1 bomboane.

Cerința
Se dau p și q, numere naturale. Aflați cel mai mic n, număr natural care satisface condițiile de mai sus.

Date de intrare
Fișierul de intrare bomboane4.in conține pe prima linie numerele p și q.

Date de ieșire
Programul afișează în fișierul bomboane4.out numărul n.

Restricții și precizări

1 ≤ p ≤ 1018
1 ≤ q ≤ 1018

Exemplul 1
bomboane4.in

4 7
bomboane4.out

27
Explicație
27 = 4 * 6 + 3. Dacă se împart 27 de bomboane la 4 copii, aceștia primesc câte 6 bomboane și rămân 3 bomboane.
27 = 7 * 3 + 6. Dacă se împart 27 de bomboane la 7 copii, aceștia primesc câte 3 bomboane și rămân 6 bomboane.

Exemplul 2
bomboane4.in

10 20
bomboane4.out

19
Explicație
19 = 1 * 10 + 9. Dacă se împart 19 bomboane la 10 copii, aceștia primesc câte o bomboană și rămân 9 bomboane.
19 = 0 * 20 + 19. Dacă se împart 19  bomboane la 20 copii, aceștia primesc câte 0 bomboane și rămân 19 bomboane.

## Cod sursă C++

```cpp
#include "fstream"
using namespace std;
ifstream cin("bomboane4.in");
ofstream cout("bomboane4.out");
int main(){
    unsigned long long p, q, a, b, tr=0, r=0;
    cin >> p >> q;
    a = p, b = q;
    while(a % b){
        unsigned long long r = a % b;
        a = b;
        b = r;
    }
    int P[100] = {}, Q[100] = {}, T[200] = {};
    for(; p ;) P[++P[0]] = p % 10, p /= 10;
    for(; q ;) Q[++Q[0]] = q % 10, q /= 10;
    T[0] = P[0] + Q[0] - 1;
    for(int i=1 ; i<=P[0] ; ++i)
     for(int j=1 ; j<=Q[0] ; ++j)
        T[i+j-1] = T[i+j-1] + P[i] * Q[j];
    for(int i=1 ; i<=T[0] ; ++i){
        tr = tr + T[i];
        T[i] = tr % 10;
        tr /= 10;
    }
    if(tr > 0)  T[++T[0]] = tr;
    for(int i=T[0] ; i> 0 ; --i){
        r = r * 10 + T[i];
        T[i] = r / b;
        r = r % b;
    }
    if(T[1] >= 1)
        T[1] = T[1] - 1;
    else{
        int j = 1;
        while(T[j] == 0)
            T[j++] = 9;
        T[j]--;
    }
    for(;T[T[0]] == 0 && T[0] > 1; --T[0]);
    for(int i=T[0] ; i> 0 ; --i)
        cout << T[i];
}
```

## Resurse

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