Î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 ≤ 10
18
1 ≤ q ≤ 10
18
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 .
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!