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

 

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

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

порядка   n = 4k + 2

 

 

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

 

 

Рис. 1. Построение обобщенного латинского квадрата 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 ), получим решение (Рис. 2):

 

 

 

Рис. 2.  Магический квадрат 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 декабря 2008 г.

Сидней

Хостинг от uCoz