Георгий
Александров
ИДЕАЛЬНЫЕ МАГИЧЕСКИЕ КВАДРАТЫ 20х20
(группа 7 11
12 13 15 16 17 18 19)
Чтобы
построить идеальный магический квадрат достаточно знать цепь Александрова,
направленность ходов конем и правило перехода от одной ленты цепи к другой.
Теория изложена в двух работах: http://renuar911.narod.ru/IMSb.html и http://renuar911.narod.ru/IMQ12.html
Группа
7 11 12 13 15 16 17 18 19 (первые [n-2]/2 чисел цепи в
порядке возрастания) дает 44
возможных решения:
Файл ,"23456a.txt"
1 1 20 15 7 11 19 17
12 13 16 18 3 5 8 9 4 2 10 14 6
2 1 20 12 7 16 13 11 19 17 15 18 3 6 4 2 10 8 5
14 9
3 1 20 17 18 19 12 7 13 16 11 15 6 10 5 8 14 9 2
3 4
4 1 20 16 11 15 18 17 12 7 13 19 2 8 14 9 4 3 6
10 5
5 1 20 16 19 12 17 15 7 13 11 18 3 10 8 14 6 4 9
2 5
6 1 20 13 19 18 16 11 12 17 7 15 6 14 4 9 10 5 3
2 8
7 1 20 12 7 18 19 15 17 13 11 16 5 10 8 4 6 2 3
14 9
8 1 20 18 15 12 19 16 7 11 13 17 4 8 10 14 5 2 9
6 3
9 1 20 18 7 16 19 11 13 17 15 12 9 6 4 8 10 2 5
14 3
10 1 20 12 7 17 16 11 18 19 13 15 6 8 2 3 10 5 4
14 9
11 1 20 19 18 17 12 7 11 16 13 15 6 8 5 10 14 9
4 3 2
12 1 20 16 7 11 18 13 12 19 17 15 6 4 2 9 8 3 10
14 5
13 1 20 18 7 11 16 13 12 15 19 17 4 2 6 9 8 5 10
14 3
14 1 20 12 7 15 18 17 16 11 13 19 2 8 10 5 4 3 6
14 9
15 1 20 11 17 16 18 13 12 19 7 15 6 14 2 9 8 3 5
4 10
16 1 20 12 7 18 15 11 19 17 13 16 5 8 4 2 10 6 3
14 9
17 1 20 12 7 17 16 15 18 11 13 19 2 8 10 3 6 5 4
14 9
18 1 20 18 15 19 16 13 12 7 11 17 4 10 14 9 8 5
2 6 3
19 1 20 15 13 16 18 17 12 7 11 19 2 10 14 9 4 3
5 8 6
20 1 20 16 7 18 19 11 15 17 13 12 9 8 4 6 10 2 3
14 5
21 1 20 11 18 17 16 15 13 12 7 19 2 14 9 8 6 5 4
3 10
22 1 20 16 13 15 18 17 11 7 12 19 2 9 14 10 4 3
6 8 5
23 1 20 16 7 12 13 11 15 17 19 18 3 2 4 6 10 8 9
14 5
24 1 20 15 7 12 18 17 13 11 16 19 2 5 10 8 4 3 9
14 6
25 1 20 17 18 11 16 15 7 12 13 19 2 8 9 14 6 5
10 3 4
26 1 20 12 15 18 19 16 13 11 7 17 4 14 10 8 5 2
3 6 9
27 1 20 19 15 18 16 13 11 7 12 17 4 9 14 10 8 5
3 6 2
28 1 20 18 19 13 16 11 7 17 12 15 6 9 4 14 10 5
8 2 3
29 1 20 17 7 12 16 15 13 11 18 19 2 3 10 8 6 5 9
14 4
30 1 20 15 7 16 12 11 18 13 17 19 2 4 8 3 10 9 5
14 6
31 1 20 17 7 12 16 11 13 19 18 15 6 3 2 8 10 5 9
14 4
32 1 20 16 7 15 12 11 17 13 18 19 2 3 8 4 10 9 6
14 5
33 1 20 16 17 11 18 13 7 19 12 15 6 9 2 14 8 3
10 4 5
34 1 20 15 11 16 18 17 13 7 12 19 2 9 14 8 4 3 5
10 6
35 1 20 18 7 12 19 15 11 13 17 16 5 4 8 10 6 2 9
14 3
36 1 20 18 7 12 15 11 13 17 19 16 5 2 4 8 10 6 9
14 3
37 1 20 12 19 18 15 11 13 17 7 16 5 14 4 8 10 6 3
2 9
38 1 20 12 19 16 17 15 11 13 7 18 3 14 8 10 6 4
5 2 9
39 1 20 11 7 18 16 13 19 15 12 17 4 9 6 2 8 5 3
14 10
40 1 20 11 7 16 18 13 17 19 12 15 6 9 2 4 8 3 5
14 10
41 1 20 18 19 12 15 11 7 17 13 16 5 8 4 14 10 6
9 2 3
42 1 20 15 7 17 13 12 18 11 16 19 2 5 10 3 9 8 4
14 6
43 1 20 11 7 15 19 17 16 13 12 18 3 9 8 5 4 2 6
14 10
44 1 20 17 7 15 13 12 16 11 18 19 2 3 10 5 9 8 6
14 4
Зная
цепи Александрова, легко найти идеальные магические квадраты по программе:
rem Построение идеального
магического квадрата порядка 4k
dim p(1000),z(1000,1000)
n=20
open
#2,"23456a.txt","r"
open
#1,"Ideal_20.txt","w"
for q=1 to 44
print #1:print #1
input #2 y
for
r1=1 to n:input #2 p(r1):print #1,p(r1);:next
r1:print #1
for k=1 to n
for t=1 to n
if k=1 and t=1 then j=1:i=1:fi
if t=1 and k>1 then i=i-1:j=j-1:if j<0 then j=j+n:fi:if
i<0 then i=i+n:fi:fi
if t>1 then i=i+1:j=j+2:fi
rem приведение i и j к рамкам магического
квадрата
v=i
a()
i=v2
v=j
a()
j=v2
z=(p(k)-1)*n+p(t):z1=int(z)
if abs(z-z1)>.9 then z=z1+1 else
z=z1:fi
z(i,j)=z
next t
next k
print #1
for i=1 to n
for j=1 to n
print #1,z(i,j)
using "####";
if j<>n then print
#1,",";:fi
next j
print #1:print #1
next i
print #1:print #1
rem Удвоение длины МК для
нахождения сумм в ломаных диагоналях
for i= 1 to n
for j=n+1 to 2*n
z(i,j)=z(i,j-n)
next j
next i
rem Построение магического
квадрата удвоенной длины
for i=1 to n
for j=1 to 2*n
next j
next i
print #1, z(1,1)+z(n,n)
print "SSSSSSSSSSSSSSSSS":print
#1,"SSSSSSSSSSSSSSSSS"
rem
Определение
сумм
по
строкам, столбцам
и
всем
диагоналям
for i=1 to n:s=0:for j=1 to n:s=s+z(i,j)
next
j:print s;:print #1,s;:next
i:print:print #1
for j=1 to n:s=0:for
i=1 to n:s=s+z(j,i)
next
i:print s;:print #1,s;next j:print:print #1
Print
"OOOOOOOOOO":Print
#1,"OOOOOOOOOO"
for t=0 to n-1
s=0
for i=1 to n
s=s+z(i,i+t)
next i
print s;:print
#1,s;
next t
print:print #1
print "WWWWWWWWW":print
#1,"WWWWWWWWW"
for t=0 to n-1
s=0
for i=n to 1
step -1
s=s+z(i,n-i+1+t)
next i
print s;:print
#1,s;
next t
print:print
print #1:print #1
next q
sub a()
v0=v/n:v1=int(v0):if v0<1 then
v1=0:fi
v2=(v0-v1)*n:v3=int(v2)
if abs(v2-v3)>.9 then v2=v3+1 else
z=v3:fi
if abs(v2)<.0000000001 then v2=n:fi
end sub
В
этой программе имеется блок проверки МК на идеальность.
9
мая
Сидней