# PBinfo #2950 – adun – Rezolvare C++

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

## Enunț

Ionel a primit la ora de matematica o problema interesantă. El are doua numere naturale X și Y și trebuie să determine un număr natural K astfel încât cel mai mic multiplu comun al numerelor X + K și Y + K să fie minim.

Cerința
Determinați valoarea lui K astfel încât cel mai mic multiplu comun al numerelor X + K și Y + K să fie minim.

Date de intrare
Programul citește de la tastatură numerele naturale X și Y separate cu un spațiu.

Date de ieșire
Programul va afișa pe ecran valoarea K.

Restricții și precizări

X și Y sunt numere naturale mai mici decât 1.000.000.001.
Dacă sunt mai multe valori K pentru care cel mai mic multiplu comun al numerelor X + K și Y + K este minim, se va afișa valoarea K minimă.

Exemplu:
Intrare

6 14
Ieșire

2
Explicație
K = 2, cel mai mic multiplu comun este 16.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
long long a,b,w,ok,d,dif,p,k,z;
long long cmmdc(long long a,long long b)
{
   while(b)
   {
       long long r=a%b;a=b;b=r;
   }
   return a;
}
long long cmmmc(long long a,long long b)
{   long long c=cmmdc(a,b);
    return (a/c)*b;
}
int main()
{
   cin>>a>>b;
   if(a>b) swap(a,b);
   z=(1ll<<62);
   ok=0;
   dif=b-a;
   for(d=1;d*d<=dif;++d)
   {
      k=d;
      p=(k-a); while(p<0) p+=k;
      w=cmmmc(a+p,b+p);
      if(w<z){ok=p;z=w;}
     //---------------------
      k=dif/d;
      p=(k-a); while(p<0) p+=k;
      w=cmmmc(a+p,b+p);
      if(w<z){ok=p;z=w;}
   }
   cout<<ok<<'\n';
   return 0;
}
```

## Resurse

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