Алгоритм поиска квадратных цепочек перестановок

Перестановка является квадратно-цепочечной, если сумма последовательных чисел всегда является совершенным квадратом. Например,

8 1 15 10 6 3 13 12 4 5 11 14 2 7 9 16

является квадратичной цепной перестановкой чисел от 1 до 16. Я хочу написать программу для нахождения квадратной цепной перестановки чисел от 1 до n, для n от 1 до 100.

Самое простое - пройти лексикографически по всем перестановкам n (я знаю, как это написать) и проверить условие квадратичной цепочки, но это займет целую вечность при больших n.

Немного лучший способ - выбирать числа в моей перестановке по одному за раз, проверять, что число, которое я только что выбрал, образует квадрат при добавлении к предыдущему числу, и надеяться, что я дойду до конца. Однако мне придется часто отступать назад, и я не думаю, что это будет очень эффективно.

Есть ли лучший способ? Также, является ли это хорошо известной проблемой? Спасибо за помощь.

14
задан Cœur 10 October 2018 в 14:39
поделиться