Rezolvare completă PbInfo #2777 Bomboane4

Î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.

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 Bomboane4:

#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];
}

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 #2777 Bomboane4

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2777 Bomboane4 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!