Внутри thue думаю bnf-код.
Фкнция
thue() сама перечисляет все решения и выдаёт пустой вектор если их нет. Как раз то, что надо.
Так-то оно уже понятно: факторизуем, затем проверяем нет ли в факторизации нечётных степеней вида
, затем раскладываем простые множители вида
в суммы квадратов и комбинируем, потом ещё смотрим на степень двойки, и учитываем её. запрограммировать-то несложно, просто немножко муторно. Всё что нужно, после разложения простых
в сумму квадратов, это
Если
, то
.
Значит степени двойки можно сразу выкинуть и раскладывать нечётное.
-- 27.05.2023, 18:09 --
Ещё теорема Фиббоначи: Если целые числа N и M могут быть представлены в виде суммы двух квадратов, то их произведение так же может быть представлено в виде суммы двух квадратов.
Если удаётся разложить число на множители, то можно каждый множитель разложить на сумму.
Тут правда возможно некоторые пары будут потеряны.
Ничего там потеряно не будет, всё сойдется. Ессно, мы для произведения сумм квадратов запишем оба варианта.
и
Выкидывать степени двойки надо канеш не огульно, а тоже посмотреть четная она или нет. Четную часть переносим к остальным квадратам
, и у нас остаются или только
или они же умноженные на два.
Т.е. приводим факторизацию
где (
простые вида
, а
простые вида
) к виду
где
остаток от деления
на
, а
- целая часть от деления
на
Я уже так и собирался сделать... Но подоспела функция
thue()