Într-o cutie sunt n bomboane.
Î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 ≤ 10181 ≤ 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.
#include <bits/stdc++.h>
using namespace std;
ifstream cin("bomboane4.in");
ofstream cout("bomboane4.out");
int A[30] , B[30] , C[50];
long long int cmmdc(long long int a , long long int b)
{
while(b)
{
long long int r = a % b;
a = b;
b = r;
}
return a;
}
void inmultire()
{
int i,j,T=0;
C[0]=A[0]+B[0]-1;
for (i=1;i<=A[0]+B[0];)
C[i++]=0;
for (i=1;i<=A[0];i++)
for (j=1;j<=B[0];j++)
C[i+j-1]+=A[i]*B[j];
for (i=1;i<=C[0];i++)
{
T=(C[i]+=T)/10;
C[i]%=10;
}
if( T )
C[++C[0]]=T;
}
unsigned long Divide(unsigned long long X)
{ int i;
unsigned long R=0;
for (i=C[0];i;i--)
{ C[i]=(R=10*R+C[i])/X;
R%=X;
}
while (!C[C[0]] && C[0]>1) C[0]--;
return R;
}
void Subtract()
{
int S[50];
int i, T=0;
S[0]=1 , S[1]=1;
for (i=S[0]+1;i<=C[0];) S[i++]=0;
for (i=1;i<=C[0];i++)
C[i]+= (T=(C[i]-=S[i]+T)<0) ? 10 : 0;
while (!C[C[0]]) C[0]--;
}
int main()
{
long long int a , b;
cin >> a >> b;
unsigned long long d = cmmdc(a , b);
int i = 1;
while(a)
{
A[i]=a%10;
a/=10;
i++;
}
A[0]=i-1;
i = 1;
while(b)
{
B[i]=b%10;
b/=10;
i++;
}
B[0]=i-1;
inmultire();
int x = Divide(d);
Subtract();
for(int i = C[0] ; i ; --i)
cout << C[i];
}