... Впрочем, дело ваше.
Да, конечно.
Кое-что добавлю. Обозначим целое положительное число
буквой
. Выбирая первым членом
, заметно сокращаем количество вычислений, причем гарантированно выявляются только нетривиальные решения. Практика подсказывает, что отношение числа итераций к величине
в этом случае убывает с ростом
, что важно. Но для
алгоритм перестает работать, что не очень важно: нетривиальные решения на этом промежутке отсутствуют.
Для строгого доказательства корректности алгоритма пришлось бы чертить схемы, попробую выразиться всё же на словах. Представим таблицу значений
с началом координат в левом верхнем углу (
по оси
,
по оси
), где ячейки равные некоторому фиксированному
(решения) выделены маркером. Ясно, что при движении в право из любой точки значения ячеек не убывают. Верно так же, что при движении вниз значения ячеек не возрастают. Нетривиальные точки характеризуются неравенством
. Еще закономерность: если из нетривиальной точки ходить конём (диагональ 1:2, шаг вниз — два шага вправо), то всегда придешь в тривиальную точку, равную исходному значению, причем все промежуточные значения (если таковые имели место) меньше исходного. Выберем теперь верхнюю ячейку, помеченную маркером (наименьшее нетривиальное решение), проведем из неё воображаемую диагональ 1:2 и луч вправо вдоль строки. Образуется сектор, направленный вершиной к началу координат (сектор наименьшего решения). Все ячейки под диагональю численно
. Вершина сектора следующего нетривиального решения расположена ниже, численно
и не может поэтому находиться под диагональю или на ней. Она внутри сектора наименьшего решения. Таким образом сектора всех нетривиальных решений оказываются вложенными друг в друга как матрешки. Правило же составлено так, что попав на луч или диагональ, воображаемый конь с них уже не сходит и, поскольку координаты его движения убывают, неминуемо проходит все точки решений. Тут скорее схема доказательства чем доказательство, но суть происходящего надеюсь ясна.
Еще раз. Первый член последовательности алгоритма
, где
. Каждый последующий член сохраняет верхний индекс предыдущего с уменьшением нижнего на единицу если предыдущий был
. В противном случае (
) верхний индекс уменьшается на единицу, нижний — на двойку. Такая последовательность содержит все нетривиальные решения уравнения
Тривиальные решения были тут
Наименьшее
с тремя нетривиальными решениями