Опишу подробно несколько алгоритмов, которые я использую для поиска решений в ручном режиме (помогает отличный инструмент - программа
mertz, о которой уже рассказала).
Алгоритм №1Алгоритм основан на свойстве:
2n! = K * (n!) ^ 2
(2n+1)! = K * (n!) ^ 2
Пример:
N=19
Код:
19! = 2 ^ 2 * 5 * 11 * 13 * 17 * 19 * (9!) ^ 2
K = 2 ^ 2 * 5 * 11 * 13 * 17 * 19 = 923780
В качестве начальной последовательности берём любое решение для N = 9, например:
Код:
1,2,3,9,8,72,70,5040,362880
Следующий член последовательности – это (9!)^2:
Код:
1,2,3,9,8,72,70,5040,362880,131681894400
Теперь осталось составить множитель K=923780.
Составление этого множителя сильно зависит от тех чисел, которые даёт нам начальная последовательность.
В случае выбранной начальной последовательности мне удалось довольно быстро составить множитель K в виде произведения двух чисел:
Код:
923780=1292*715
Последний шаг:
Код:
19! = K*(9!)^2 = 121645100408832000
Это решение у меня получилось в 17 шагов.
Алгоритм №2Алгоритм основан на свойстве:
n! = (n-1)!*n=(n-2)!*(n-1)*n=...
Пример:
N=21
Код:
21!=19*20*21*18!=7980*18!
Пусть у нас есть решение для N=18 в 13 шагов:
Код:
1,2,...,6402373705728000
Осталось составить множитель 7980 из тех чисел, которые даёт нам начальная последовательность.
В моём решении это удалось сделать за два шага:
Код:
38,7980
Последний шаг:
Код:
7980*18!
В результате получилось решение для N=21 в 16 шагов:
Код:
1,2,...,6402373705728000,38,7980,51090942171709440000
Алгоритм №3Алгоритм
выложил Pavlovsky.
Я реализовала эту идею для N=19, взяв в качестве начальной последовательности ту, что выложил
Pavlovsky:
Код:
1,2,4,6,36,1296,1290,1664100,1662804
Хорошая последовательность. Кстати, потом посмотрела в БД
mertz, у него тоже есть аналогичная последовательность.
(Оффтоп)
…
"1664000 = [8] 1,2,4,16,20,320,1280,1300,1664000"
"1663488 = [8] 1,2,4,16,18,288,304,92416,1663488"
"1662810 = [8] 1,2,3,6,36,1296,1290,1664100,1662810"
"1662804 = [8] 1,2,3,6,36,1296,1290,1664100,1662804"
"1661521 = [8] 1,2,3,6,36,1296,1290,1289,1661521"
"1661520 = [8] 1,2,3,6,36,1296,1290,1288,1661520"
…
Надо было ещё догадаться, что 1662804 кратно 46189.
Итак, имеем:
Код:
19!=1662804*73156608000
Сомножитель получился большой, составить его быстро не получилось; я затратила на это 7 шагов. Последний шаг – умножение. Получено решение в 16 шагов.
Продолжу...