Георгий Александров
Идеальный panmagic
Идеальным будем считать такой магический квадрат, который одновременно и пандиагонален, и ассоциативен. Мною было определено, что поставленной цели можно добиться, если порядок матрицы n – число нечетное.
Когда же n делится на 4 , то строится либо пандиагональный квадрат, либо ассоциативный. Объединить оба условия, как мне кажется, невозможно (дальнейшие исследования показали, что я ошибался - идеальные магические квадраты порядка 4k существуют).
Еще хуже обстоит дело с магическими квадратами порядка n = 4k+2. Для этого вида матриц удается построить лишь ассоциативный магический квадрат.
Таким образом, идеальный магический квадрат имеет либо нечетный, либо четно-четный порядок.
Уникальный метод построения любого идеального квадрата при n>3 был найден мной совсем недавно (см. http://renuar911.narod.ru/ideal_mk.html ).
Дальнейшие поиски показали, что существует еще один замечательный алгоритм расстановки чисел в ячейках. Он также годится для матриц, порядок которых n нечетный и не кратный 3-м. Данный идеальный квадрат, поражает, прежде всего, красотой мозаики четно-нечетных чисел. Узор настолько гармоничен, что выглядит как произведение искусства.
В этом методе единица ставится в левом верхнем углу. Шахматный ход такой: три клетки вниз, две – влево. Если же в конечной ячейке уже стоит число, то вместо хода конем смещаемся на одну позицию по диагонали направо-вниз. Все остальное - то же, что и в упомянутой статье. Сказанное легко понять из такого примера (см. http://renuar911.narod.ru/U1.jpg )
Программа на языке Yabasic выглядит довольно компактно:
rem Построение идеального магического квадрата методом одностороннего хода шахматного коня
rem Для нечетных значений n , не кратных трем
open #1,"prime_n.txt","w"
dim i(10000),j(10000),z(100,100)
n=13
i=1:j=n:z=1:z(i,j)=1
i(1)=i:j(1)=j
for k=2 to n*n
z=z+1
i1=i:i=i(k-1)+2:j1=j:j=j(k-1)+1
a()
if z(i,j)<>0 then i=i1+1:j=j1-1:fi
a()
i(k)=i:j(k)=j
z(i,j)=z
next k
for i=1 to n
for j=n to 1 step -1
print z(i,j) using "####";
print #1,z(i,j) using "####";:if j<>1 then print #1,",";:fi
next j
print #1
next i
print:print
end
sub a()
if i<=n and j>n then j=j-n:fi
if i>n and j<=n then i=i-n:fi
if i>n and j>n then i=i-n:j=j-n:fi
if j<1 then j=n+j:fi
end sub
На экране высвечивается числовая матрица. Та же матрица печатается в файл “prime_n.txt”:
1, 75, 136, 28, 102, 163, 55, 129, 21, 82, 156, 48, 109
123, 15, 89, 150, 42, 116, 8, 69, 143, 35, 96, 157, 62
76, 137, 29, 103, 164, 56, 130, 22, 83, 144, 49, 110, 2
16, 90, 151, 43, 117, 9, 70, 131, 36, 97, 158, 63, 124
138, 30, 104, 165, 57, 118, 23, 84, 145, 50, 111, 3, 77
91, 152, 44, 105, 10, 71, 132, 37, 98, 159, 64, 125, 17
31, 92, 166, 58, 119, 24, 85, 146, 51, 112, 4, 78, 139
153, 45, 106, 11, 72, 133, 38, 99, 160, 65, 126, 18, 79
93, 167, 59, 120, 25, 86, 147, 52, 113, 5, 66, 140, 32
46, 107, 12, 73, 134, 39, 100, 161, 53, 127, 19, 80, 154
168, 60, 121, 26, 87, 148, 40, 114, 6, 67, 141, 33, 94
108, 13, 74, 135, 27, 101, 162, 54, 128, 20, 81, 155, 47
61, 122, 14, 88, 149, 41, 115, 7, 68, 142, 34, 95, 169
Запятые мне потребовались для того, чтобы в редакторе Word быстро сделать преобразование текста в таблицу.
В первой моей статье я забыл дать распечатку программы, позволяющей строить идеальные магические квадраты любого нечетного порядка n. Восполняю этот досадный пробел здесь:
rem Построение идеального магического квадрата нечетного порядка
rem методом одностороннего хода шахматного коня
dim i(10000),j(10000),z(100,100)
n=15
i=(n+1)/2:j=(n+1)/2+1:z=1:z(i,j)=1
i(1)=i:j(1)=j
for k=2 to n*n
z=z+1
i1=i:i=i(k-1)+2:j=j(k-1)+1
a()
if z(i,j)<>0 then i=i1:j=j+1:fi
a()
i(k)=i:j(k)=j
z(i,j)=z
next k
for i=n to 1 step -1
for j=1 to n
print z(i,j) using "####";
next j
next i
print:print
end
sub a()
if i<=n and j>n then j=j-n:fi
if i>n and j<=n then i=i-n:fi
if i>n and j>n then i=i-n:j=j-n:fi
end sub
В следующей статье я опишу метод построения пандиагональных квадратов порядка n=4k.
10 сентября 2007 г.
Москва