Ладно терять уже нечего - выкладываю свою самую лучшую идею! Допустим у нас есть множество
, где
, для всех
. То есть для всех пар чисел в множестве их gcd одинаково (равно
). Обозначим множеством
расположением всех чисел в
(для какого то решения), то есть
.
Утверждение: Числа в
можно оптимально раставить в
за время
, где
.
Для этого можно использовать Венгерский алгоритм решающий задачу о назначениях (
https://ru.wikipedia.org/wiki/%D0%92%D0 ... 1%82%D0%BC). Обозначим
матрицу M, где
это цена поставки числа
на место
. Точнее
. Важно отметить что для подсчёта
нам не надо учитывать как числа в
влияют друг на друга. Это потому что для всех
имеем
и любая перестановка в
будет давать одинаковый результат. Венгерский алгоритм даст лучшее назначение рядов к колонкам в
, то есть оптимальную растановку чисел в
на места
.
Теперь как находить
? Есть много вариантов. Например
, где
простое число (или 1),
и
положительные константы. Для 6х6 и
получаем такие разные
:
1 2 3 5 7 11 13 17 19 23 29 31
2 4 6 10 14 22 26 34
3 6 9 15 21 33
4 8 12 20 28
5 10 15 25 35
6 12 18 30
7 14 21 35
8 16 24
9 18 27
10 20 30
11 22 33
12 24 36
А вот результат для
:
1 4 9 25
2 8 18
3 12 27
4 16 36
5 20
6 24
7 28
8 32
9 36
А также можно объеденить эти
и получить более длиные, например:
1 4 9 25 7 11 13 17 19 23 29 31
2 8 18 10 14 22 26 34
3 12 27 15 21 33
4 16 36 20 28
5 20 15 25 35
6 24 18 30
7 28 21 35
8 32 24
9 36 27