Перестановка является квадратной цепью, если сумма последовательных чисел всегда является идеальным квадратом. Например,
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 больших.
Немного лучший способ - выбрать числа в моей перестановке по одному, проверить, чтобы номер, который я только что выбрал, делает квадрат при добавлении к предыдущему номеру и надеюсь, что я доберусь до конца. Однако мне придется много работать, и я не думаю, что это будет очень эффективно.
Есть ли лучший способ? Кроме того, это известная проблема? Благодарим за помощь.