Я предлагаю свой алгоритм поиска оптимального решения для N=7.
В алгоритме используется общая формула пандиагонального квадрата 7-го порядка, она была приведена здесь:
post744916.html#p744916и кроме того используется шаблон.
Покажу конфигурацию квадрата:
Код:
a1 x1 a2 x2 a3 x3 a4
x4 a5 x5 a6 x6 a7 x7
a8 x8 a9 x9 a10 x10 a11
x11 a12 x12 a13 x13 a14 x14
a15 x15 a16 x16 a17 x17 a18
x18 a19 x19 a20 x20 a21 x21
x22 x23 x24 x25 x26 x27 x28
По этой конфигурации была получена общая формула.
Элемент а4 свободный.
Поскольку мы с
Jarek установили, что для квадратов с магической константой
обязательно использовать простое число 3, зафиксируем свободный элемент а4, присвоив ему значение 3.
Теперь представлю шаблон из вычетов по модулю 3 (этот шаблон получен по одному из решений
Jarek):
Код:
2 2 1 2 1 1 0
2 2 1 2 2 1 2
2 1 2 1 1 1 1
1 2 1 2 2 2 2
2 2 1 2 2 2 1
1 2 2 2 2 1 2
2 1 1 1 2 1 1
Имеем 21 чисел равных 1(mod3) и 27 чисел равных 2(mod3). Вычет 0 соответствует числу 3.
Этот шаблон годится для построения квадратов с магическими константами S=0(mod3), например, 735, 741 и т.д.
Осталось представить массив простых чисел, из которых будем строить квадраты. Этот массив я составила из чисел, составляющих два решения
Jarek:
и
. В массиве 59 простых чисел:
Код:
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281
Разобьём массив на две группы: числа, соответствующие вычету 1, и числа, соответствующие вычету 2.
Группа 1
Код:
7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97, 103, 109, 127, 139, 151, 157, 163, 181, 193, 199, 211, 223, 229, 241, 271, 277
(27 чисел)
Группа 2
Код:
5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89, 101, 107, 113, 131, 137, 149, 167, 173, 179, 191, 197, 227, 233, 239, 251, 257, 263, 269, 281
(31 число)
Очень хорошо распределились числа. В шаблоне имеем 21 элемент из первой группы (будут выбираться из 27 чисел) и 27 элементов из второй группы (будут выбираться из 31 числа).
Всё готово. Осталось написать программу.
Я написала программу построения по общей формуле, но без использования шаблона. Выше показала некоторые результаты, полученные по этой программе (полуфабрикаты). До конца программу не выполнила - очень долго надо ждать.
Теперь напишу программу с использованием шаблона, это должно существенно уменьшить время выполнения, так как перебор сильно сокращается.
Повторюсь: представленный шаблон не является единственным. Поэтому если решение по данному шаблону не будет найдено, это ещё не будет означать, что решения не существует. Оно может иметь другую структуру, не соответствующую данному шаблону.