There are various algorithms for constructing magic squares depending on the size and properties of the square. For odd-sized squares, a specific algorithm is provided that utilizes a vector to store the square, while for double-even squares, a different method is outlined. Additionally, a method for simple-even magic squares is discussed, which incorporates the odd magic square algorithm for element interchange. The discussion highlights that there is no single algorithm applicable to all sizes, but rather distinct methods for odd, double-even, and simple-even cases. Overall, the conversation emphasizes the complexity and variety of approaches to generating magic squares.
#1
Vineeth T
31
0
Is there any algorithm to form a magic square of any size with a desired magic sum ?
Also can we make a magic square not only with the numbers from 1 to n2
but using any random numbers ?
But in this webpage,no general methods of construction of a magic square of any numbers are given.
Can you give me a better one ?
#4
RamaWolf
95
2
There is not one algorithm for all n (a natural number); I think, there are at least 3:
for odd numbers, for double even ( ie for numbers with 4 as factor) and for even numbers.
Below you find my little algorithm (written in ARIBAS) to generate an odd magic square;
example for n = 11; for simplicity of the algorithm, a 'vector' is used to store the 'square' .
n1:=n - 1; n2:=n*n; n3:=n1 + n1 + 1;
realloc(a, n2);
i:=1;
j:= n1 div 2;
a[j]:=i;
while i < n2 do
i:=i + 1;
if j mod n = n1 then
k:=j - n3;
else
k:=j - n1;
end;
if k < 0 then
k:=k + n2;
end;
if a[k] = 0 then
j:=k;
else
j:=j + n;
end;
a[j]:=i;
end;
#5
ramsey2879
841
3
Vineeth T said:
But in this webpage,no general methods of construction of a magic square of any numbers are given.
Can you give me a better one ?
What do you mean by "general methods"? I consider "A method of constructing majic squares of even number of rows" and "Method for constructing a majic square of odd order" to be "general methods".
#6
RamaWolf
95
2
Below you find my little algorithm (written in ARIBAS) to generate an double-even magic square of side length n (ie 4 divides n);
example for n = 4; for simplicity of the algorithm, a 'vector' is used to store the 'square'
d:= n div 4; d2:=d + d; n2:=n * n;
realloc(a,n2);
k:=1 + n2; k2:=0;
for i:=1 to d do
for j:=1 to d do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k;
end;
for j:=1 to d2 do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k2;
end;
for j:=1 to d do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k;
end;
end;
for i:=1 to d2 do
for j:=1 to d do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k2;
end;
for j:=1 to d2 do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k;
end;
for j:=1 to d do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k2;
end;
end;
for i:=1 to d do
for j:=1 to d do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k;
end;
for j:=1 to d2 do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k2;
end;
for j:=1 to d do
k:=k - 1; k2:=k2 + 1; a[k2 - 1]:=k;
end;
end;
#7
RamaWolf
95
2
Below you find my little algorithm (written in ARIBAS) to generate an simple-even magic square of side length n (ie n div 2 must be odd);
example for n = 6; the algorithm uses my 'MagicSquareOdd' (see above)
to form a matrix a and an auxiliary matrix 'aux' for the needed inter change of
some elements of matix a
k:= n div 2; k2:= k * k; d:= (k - 1) div 2;
a:=alloc(array,n,alloc(array,n));
aux:=alloc(array,k,alloc(array,n));
for i:=0 to d - 1 do
for j:=0 to d - 1 do
aux[i][j]:=1;
end;
end;
for j:=0 to d - 1 do
aux[d][1+j]:=2;
end;
for i:=d + 1 to k - 1 do
for j:=0 to d - 1 do
aux[i][j]:=3;
end;
end;
for i:=0 to k - 1 do
for j:=0 to d - 2 do
aux[i][n-j-1]:=4;
end;
end;
realloc(b, k2);
b:=MagicSquareOdd(k);
for i:=0 to k - 1 do
for j:=0 to k - 1 do
a[i][j]:=b[i*k+j]; a[i][j+k]:=2*k2+b[i*k+j];
a[i+k][j]:=3*k2+b[i*k+j]; a[i+k][j+k]:=k2+b[i*k+j];
end;
end;
for i:=0 to k - 1 do
for j:=0 to n - 1 do
if aux[i][j] > 0 then
d:=a[i][j]; a[i][j]:=a[i+k][j]; a[i+k][j]:=d;
end;
end;
end;