Георгий Александров

 

Красивый способ построения

магических квадратов

        

Находить новые магические квадраты (или МК)  – это истинное наслаждение для любителя головоломок. Еще интересней выявлять простые методы составления волшебных матриц. Но самое прекрасное – обнаружить  элементарный единый подход к созданию абсолютно всех магических квадратов.

Кажется, мне это удалось путем использования латинских квадратов. Универсальный способ построения МК можно условно назвать “методом цифровых волн”. Рассмотрим его применительно к трем группам магических квадратов:

- нечетного порядка ;

- порядка двойной четности ;

- порядка одинарной четности.

 

1.        Магические квадраты порядка n = 2k + 1

 

Латинский квадрат можно построить по следующему принципу. Пусть “цифровой ветер“ дует в направлении желтой стрелки, то есть справа налево и вниз (это направление совпадает с главной диагональю квадрата). Тогда будет образовываться линейный фронт цифровой волны, причем единичная волна находится на пересечении со средней ячейкой самой верхней строки матрицы (желтый ряд на Рис. 1):

 

 

Рис. 1. Одиночная цифровая волна

 

        Вот и вся подготовительная работа.

Пусть числа в ячейках  данной матрицы – это  Z( i, j ) , а   Zmax – наибольшее число в поле латинского квадрата. Тогда магический квадрат M(i,j)  строится согласно правилу:

 

M( i,j ) = Zmax [Z( i , j ) 1 ]  +  Z( i , n+1 - j)

 

Допустим, начало координат находится в левом верхнем углу. Параметр i – номер строки , j – номер столбца. В нашем примере  Zmax = 9. При  i =2    j = 3   Z( 2 , 3 ) = 4 ;  Z( 2 , 9+1-3) =Z(2,7) = 9. Следовательно,  M( 2 , 3 ) = 9 ( 4 1 )  + 9 = 36 .  Вычислив таким образом все  M( i,j ), получим решение (Рис. 2):

 

 

Рис. 2. Магический квадрат 9 х 9

 

        В данном решении имеет место компактное ядро нечетных чисел (цветная область)

 

2.         Магические квадраты порядка n = 4k

 

Для построения латинского квадрата потребуется уже два горизонтальных цифровых ветра: один “дует” слева направо (для желтой области ячеек), другой – справа налево (для белых ячеек). На Рис. 3 показан принцип образования цифровых волн:

 

Рис. 3. Система двух цифровых волн

 

Пусть числа в ячейках  латинского квадрата  – это  Z( i, j ) , а   Zmax – наибольшее. Тогда магический квадрат M(i,j)  строится согласно правилу:

 

M( i,j ) = Zmax [Z( i, j ) 1 ]  +  Z( j, i)

 

Допустим, начало координат находится в левом верхнем углу. Параметр i – номер строки , j – номер столбца. В нашем примере  Zmax = 12. При  i =2    j = 3   Z( 2 , 3 ) = 3 ;  Z( 3 , 2) = 2. Следовательно,  M( 2 , 3 ) = 12 ( 3 1 )  +  2 = 26 .  Вычислив таким образом все  M( i,j ), получим решение (Рис. 4):

 

 

 

 

 

 

Рис. 4. Магический квадрат 12 х 12

 

         Нечетные числа расположены симметрично относительно средней вертикали.

 

3.        Магические квадраты порядка n = 4k + 2

 

            Теперь рассмотрим матрицы 6 х 6,  10 х 10 , 14 х 14  и так далее. Каждый, кто составлял магические квадраты данного вида, непременно сталкивался с более значительными трудностями, нежели при построении МК нечетного порядка или порядка двойной четности. Тем не менее, мне удалось разработать общий и достаточно простой способ компоновки этой группы строптивых головоломок. Он базируется на методе обратимых квадратов, но доведен до зеркального блеска простоты. Рассмотрим конкретный пример. Пусть n = 4k + 2 = 14 .  Отсюда  k = 3 . На Рис. 5 показан принцип создания обобщенного латинского квадрата:

 

 

Рис. 5. Построение обобщенного латинского квадрата 14 х 14

 

         Числа здесь идут двумя регулярными фронтами с обеих сторон. Вся хитрость заключается в построении желтой области, параметры которой четко привязаны к величине  k > 0 .  Получаем сразу обобщенный латинский квадрат (или ОЛК).

Теперь уже можно приступать к созданию магического квадрата.

Пусть числа в ячейках  ОЛК – это  Z( i, j ) , а   Zmax – наибольшее число в поле латинского квадрата. Тогда магический квадрат M(i,j)  строится согласно правилу:

 

M( i,j ) = Zmax [Z( i, j ) 1 ]  +  Z( j, i)

 

Допустим, начало координат находится в левом верхнем углу. Параметр i – номер строки , j – номер столбца. В нашем примере  Zmax = 14. При  i =2    j = 3   Z( 2 , 3 ) = 12 ;  Z( 3 , 2) = 2. Следовательно,  M( 2 , 3 ) = 14 ( 12 1 )  +  2 = 156 .  Вычислив таким образом все  M( i,j ), получим решение (Рис. 6):

 

 

 

Рис. 6.  Магический квадрат 14 х 14

 

 

      В этом примере выделены все нечетные числа. Рисунок получился чуть-чуть негармоничным. Отсутствие полной симметрии подтверждает тезис о сложности рассматриваемой группы магических квадратов.

         Текст программы для расчета чисел в ячейках МК по найденному латинскому квадрату такой:

 

rem Программа построения МК порядка n = 4k + 2

dim z(100,100),z1(100,100),c(10000)

open #1,"14-n.txt","r"

open #2,"14ms-n.txt","w"

n=14

for i=1 to n:for j=1 to n:input #1 z1(i,j):next j:next i

for i=1 to n:for j=1 to n:z(i,j)=(z1(i,j)-1)*(n)+z1(j,i)

next j:next i: for i=1 to n*n:c(i)=0:next i

 for i= 1 to n:for j=1 to n:z=z(i,j)

 c(z)=c(z)+1: next j:next i:c=0: for i=1 to n*n

 if c(i)>1 then c=c+1:fi: next i:if c=0 then

for i=1 to n:for j=1 to n:print #2,z(i,j);:if j<n then print #2,",";:fi:next j:print #2:next i:print #2

s0=0:for i=1 to n:s0=0:for j=1 to n:s0=s0+z(i,j):next j:print #2,s0;:next i:print #2

s0=0:for j=1 to n:s0=0:for i=1 to n:s0=s0+z(i,j):next i:print #2,s0;:next j:print #2:print #2

for i=1 to n:for j=n+1 to n+n:z(i,j)=z(i,j-n):next j:next i

print #2

s0=0:for j=1 to n:s0=0:for i=1 to n:s0=s0+z(i,i+j-1):next i:print #2,s0;:next j:print #2

s0=0:for j=1 to n:s0=0:for i=n to 1 step -1:s0=s0+z(i,i+j-1):next i:print #2,s0;:next j:print #2:print #2:fi

 

         По этой программе производится проверка на отсутствие повторений чисел и на магичность.

 

 

10-13 декабря 2008 г.

Сидней

Хостинг от uCoz