Это не просто "уравнение с двумя переменными". Корни этого уравнения должны быть натуральными числами (потому что эти корни - это количество книг, оно не может быть дробным никак). Именно такие уравнения называются "диофантовыми".
В общем случае решений у уравнения с двумя переменными бесконечно много. Для примера рассмотрим простейшее такое уравнение: x + y = 2. Мы можем придать x любое значение и вычислить соответствующее значение y по формуле y = 2 - x так, чтобы получилось решение. Поэтому тут решений бесконечно много. Например, пусть x = sqrt(3) + sqrt(7). Тогда y = 2 - sqrt(3) - sqrt(7). Вот и решение.
Но если на x и y есть дополнительные ограничения, ситуация меняется. Если оба числа должны быть натуральными числами, то x - целое, x > 0 и 2 - x > 0. Есть единственное число, удовлетворяющее обоим этим условиям: x = 1. Если x > 1 и при этом целое, то x равен по крайней мере 2, а тогда 2-x не больше 0. Значит, x не может быть больше 1 - а у нас есть всего одно целое число, которое больше 0, но не больше 1: это 1. И в натуральных числах решение нашего уравнения единственно: x = 1, y = 1.
А у уравнения x + y = 0 по-прежнему бесконечно много решений в области вещественных чисел, но натуральных решений (чтобы и x, и y были бы натуральными), очевидно, нет.
Вернёмся к уравнению 7x + 8y = 50. Решений у него бесконечно много. Мы можем придать x произвольное значение и вычислить y по формуле y = (50-7x)/8. Но нас интересуют далеко не все решения - нам нужны только целые неотрицательные решения.
План такой. Сначала найдём все целые (хотя бы и отрицательные), а потом из них выделим все целые неотрицательные.
Найти все целые решения - значит, найти некоторую формулу, в которой обе переменные выражаются через некоторый целый параметр n. Придавая этому параметру разные целые значения, мы будем получать целые решения.
7x + 8y = 50
Очень важный момент - коэффициенты при x и y взаимно просты. Понять, зачем эта проверка, проще на примере. Если бы уравнение выглядело как 6x + 9y = 50 - у него не было бы целых решений. Если x и y целые, то левая часть очевидно делится на 3, а правая так же очевидно не делится - равенство невозможно. В нашем случае целые решения есть (это общий результат: если коэффициенты взаимно просты, целые решения есть для любой целой правой части). Нам везёт, что 7 и 8 отличаются на 1, и мы можем разбить 8y = 7y + y:
7x + 7y + y = 50
7(x+y) + y = 50
И у нас появилось удобное выражение для параметра: x+y. Удобно оно тем, что придав ему какое-то целое значение, мы сразу же получаем значение для y. В общем случае так бы не прокатило :).
Обзываем x+y = n.
y через n у нас сразу выражен. Выражаем x через n.
x = -50 + 8n
y = 50 - 7n
Если n - целое, то x и y оба, очевидно, тоже целые. Если мы придаём n какое-то значение - мы получаем пару целых чисел xn, yn, которая является решением нашего уравнения.
Осталось совсем немного. Нам нужны не просто целые решения - нам нужны неотрицательные значения (мы же книги покупали!). Но x > 0, только когда n > 6, то есть по крайней мере 7. А если n больше или равно 8, то уже y < 0. Обе эти переменные оказываются больше 0 только при одном значении параметра: при n = 7.
Значит, наше уравнение хоть и имеет бесконечно много решений, но для нас физический смысл имеет только x = 6, y = 1. Все остальные его решения не могут обозначать количества купленных книг.