Код:
x8=s-x1-x2-x3-x4-x5-x6-x7
x16=s-x10-x11-x12-x13-x14-x15-x9
x24=s-x17-x18-x19-x20-x21-x22-x23
x32=s-x25-x26-x27-x28-x29-x30-x31
x40=s-x33-x34-x35-x36-x37-x38-x39
. . . . . . . . . . . . . . . . . .
Посмотрите на начало обшей формулы пандиагонального квадрата 8-го порядка.
Вы увидите пять строк квадрата в чистом виде (схема квадрата была показана выше).
Немного отвлекусь, чтобы дать определение цепочки или магического ряда.
ОпределениеДля магического квадрата порядка
цепочкой или магическим рядом называется набор из
чисел, дающих в сумме магическую константу квадрата.
Так вот, первые пять цепочек можно просто генерировать случайным образом, согласно общей формуле. Можно часть из них генерировать случайным образом, а другую часть строить перебором. Наконец
можно найти все эти цепочки и составить все возможные комбинации из 5 цепочек. Понимаю, что практически это сложно сделть, но теоретически возможно.
Итак, я 4 строки (цепочки) генерирую случайным образом:
Код:
79 347 227 83 229 421 197 433
101 331 233 127 409 373 149 293
269 439 389 167 181 151 313 107
131 349 211 277 383 251 317 97
x33 x34 x35 x36 x37 x38 x39 x40
x41 x42 x43 x44 x45 x46 x47 x48
x49 x50 x51 x52 x53 x54 x55 x56
x57 x58 x59 x60 x61 x62 x63 x64
Это выполняется пару секунд.
Пятую строку решила строить перебором, а то перебирать совсем нечего будет
Это тоже выполняется пару секунд:
Код:
79 347 227 83 229 421 197 433
101 331 233 127 409 373 149 293
269 439 389 167 181 151 313 107
131 349 211 277 383 251 317 97
89 199 191 103 239 367 397 431
x41 x42 x43 x44 x45 x46 x47 x48
x49 x50 x51 x52 x53 x54 x55 x56
x57 x58 x59 x60 x61 x62 x63 x64
А теперь... снова посмотрите на общую формулу: свободная переменная осталась одна - x41. Весело!
К 7 перебираемым переменным пятой строки добавляется ещё одна. Итого: 8 свободных переменных из 32. И... всё равно перебор буксует!
Вот что пока удалось получить:
Код:
79 347 227 83 229 421 197 433
101 331 233 127 409 373 149 293
269 439 389 167 181 151 313 107
131 349 211 277 383 251 317 97
89 199 191 103 239 367 397 431
401 419 139 x44 x45 x46 x47 x48
x49 x50 x51 x52 x53 x54 x55 x56
x57 x58 x59 x60 x61 x62 x63 x64
Теория такова: фиксируем элемент x1. Находим все цепочки, начинающиеся с этого элемента. Затем находим все цепочки, не содержащие числа, присвоенного элементу x1. Эти цепочки будут комбинироваться с первой цепочкой: первая цепочка плюс ещё 4 цепочки.
Всё! Осталось 24 числа в массиве, и надо перебрать всего один элемент - x41. Все остальные надо просто вычислять по готовым формулам и проверять на принадлежность массиву из 24 чисел. Эта процедура, понятно, выполнится очень быстро.
Теория цепочного построения была успешно использована
12d3 при построении МК 6-го порядка. Понятно, что для порядка 6 цепочек будет значительно меньше.
Для порядка 8 не знаю, насколько это возможно выполнить практически. Если цепочек будет ну очень много, тогда, конечно, трудно. Зато... это была бы полная проверка возможности построения квадрата, чего, конечно, не может быть при случайной генерации цепочек. Тут можно ловить удачу и... никогда её не поймать
-- Ср сен 17, 2014 15:51:39 --Удалось правильно заполнить всю шестую строку!
Код:
79 317 223 233 367 313 173 311
431 97 137 193 389 229 373 167
197 383 281 163 89 397 349 157
257 439 191 277 101 107 433 211
103 181 379 337 419 127 331 139
269 239 421 307 179 293 199 109
x x x x x x x x
x x x x x x x x
S=2016
Очень много зависит от сгенерированных случайным образом цепочек.
Буду дальше пытаться заполнить.