Bizə məlumdur ki:
a + x -yə bölünür;
b + x -ya bölünür;
Nəticədə, a + b + x həm , həm də -yə bölünür, bu, a + b + x-in NOK(a, b)-yə bölünməsi ilə ekvivalentdir. Yəni elə bir rəqəmi mövcuddur ki,
kimi NOK(a, b) - a - b götürək. Lakin bu rəqəm mənfi olarsa, onun əvəzinə belə götürək:
Görünür, a + b \le 2 \cdot NOK(a, b).
Nümunə
İkinci nümunədə a = 3, b = 4.~NOK(3, 4) = 12.
Cavab x = NOK(a, b) - a - b = 12 - 3 - 4 = 5-ə bərabərdir.
Üçüncü nümunədə a = 123, b = 123. NOK(123, 123) = 123.
Cavab x = NOK(a, b) - a - b = 123 - 123 - 123 = -123-ə bərabərdir. Bu rəqəm mənfi olduğu üçün cavab belə olacaq:
Alqoritmın Tətbiqi
gcd funksiyası və rəqəmlərinin ən böyük ortaq bölənini hesablayır.
long long gcd(long long a, long long b)
{
return (!b) ? a : gcd(b, a % b);
}Giriş məlumatlarını oxuyuruq.
cin >> a >> b;lcm = NOK(a, b) = (a \cdot b)~/~NOD(a, b)-ni hesablayırıq.
lcm = a / gcd(a, b) * b;Cavabı hesablayırıq.
res = lcm - a - b;
if (res < 0) res += lcm;Cavabı çıxarırıq.
cout << res << endl;