Почитайте о методе Ферма (алгоритм C) и методе решета (алгоритм D) у Д. Кнута (Искусство программирования для ЭВМ, т. 2. Получисленные алгоритмы. "Мир", Москва, 1977.), раздел 4.5.4.
Someone, спасибо за подсказку по теме. Уже информацию нашёл и знакомлюсь
Или выигрыш в два раза малосущественная величина?
Да нет, всё нормально. Только на языке сравнений всё это выражается проще. Положительное нечетное
есть разность двух квадратов разной четности. Если
дает остаток
при делении на
то старший квадрат четный, если же
как в Вашем примере, то старший квадрат нечетный. Это происходит потому, что квадраты при делении на
могут давать в остатке либо
, либо
То же и по
Единственно возможный вариант
значит старший квадрат кратен трем. По
тоже
, но набор квадратичных вычетов другой:
Тут только так:
Следовательно оба квадрата не делятся на
Таким образом основание старшего квадрата есть нечетное число кратное трем и не кратное пяти, то есть
Можно перебирать только их. Можно и по другим модулям смотреть, но муторно. Всё равно ведь быстрой факторизацией это не назовешь.
Upd
то есть
Точнее так:
поскольку
а нужна единица. Всё это верно, кстати, и относительно тривиальной пары квадратов, на которую можно ориентироваться как на частный случай. По маленьким модулям даже удобно.
Andrey A, я тоже рассматривал вариант с остатками по модулю
. Но в этом случае не получается одна формула. Другими словами надо создавать программу, которая будет отсекать ненужные числа и оставлять подходящие. Либо пробегать значения сначала по первой формуле, затем по следующей и так далее. Когда есть одна формула, как у меня, то проверив до какого-то значения
мы точно знаем, что не пропустили искомого множителя.