Manual Reference Pages - mat_magic (3m_la)
NAME
mat_magic(3f) - [M_LA] create an N x N magic square array, N>2
CONTENTS
Synopsis
Description
Options
Pedigree
Examples
SYNOPSIS
subroutine mat_magic(a,rows,n)
integer :: rows
integer :: n
doubleprecision :: a(rows,n)
DESCRIPTION
This procedure returns the values to create a magic squares array,
an n by n matrix in which each integer 1, 2, ..., n*n appears exactly
once; and all columns, rows, and diagonals sum to the same number.
OPTIONS
|
A |
An array to fill with the magic square values. The
smallest dimension should be >= 3. Since a square is
required only the first N will be filled,
where n=min(rows,columns).
|
|
ROWS |
size of a row of A; must be >= N
|
|
N |
size of an edge of the magic square. A() must have at
least this many columns.
|
|
PEDIGREE
Based on an algorithm for magic squares from
Mathematical Recreations and Essays, 12th ed.,
by W. W. Rouse Ball and H. S. M. Coxeter
EXAMPLES
Sample program
program demo_mat_magic
use M_LA, only : mat_magic
implicit none
integer,parameter :: isize=10
doubleprecision :: arr(isize,isize)
integer :: i, j, k
do k=1,isize
write(*,(*(g0,1x)))K=,k
call mat_magic(arr,size(arr,dim=1),k)
do i=1,k
write(*,(i2,":",*(i5):))i,&
(nint(arr(i,j)),j=1,k),&
nint(sum(arr(k,:k)))
enddo
enddo
end program demo_mat_magic
Results:
K= 1
1: 1 1
K= 2
1: 1 3 6
2: 4 2 6
K= 3
1: 8 1 6 15
2: 3 5 7 15
3: 4 9 2 15
K= 4
1: 16 2 3 13 34
2: 5 11 10 8 34
3: 9 7 6 12 34
4: 4 14 15 1 34
K= 5
1: 17 24 1 8 15 65
2: 23 5 7 14 16 65
3: 4 6 13 20 22 65
4: 10 12 19 21 3 65
5: 11 18 25 2 9 65
K= 6
1: 35 1 6 26 19 24 111
2: 3 32 7 21 23 25 111
3: 31 9 2 22 27 20 111
4: 8 28 33 17 10 15 111
5: 30 5 34 12 14 16 111
6: 4 36 29 13 18 11 111
K= 7
1: 30 39 48 1 10 19 28 175
2: 38 47 7 9 18 27 29 175
3: 46 6 8 17 26 35 37 175
4: 5 14 16 25 34 36 45 175
5: 13 15 24 33 42 44 4 175
6: 21 23 32 41 43 3 12 175
7: 22 31 40 49 2 11 20 175
K= 8
1: 64 2 3 61 60 6 7 57 260
2: 9 55 54 12 13 51 50 16 260
3: 17 47 46 20 21 43 42 24 260
4: 40 26 27 37 36 30 31 33 260
5: 32 34 35 29 28 38 39 25 260
6: 41 23 22 44 45 19 18 48 260
7: 49 15 14 52 53 11 10 56 260
8: 8 58 59 5 4 62 63 1 260
K= 9
1: 47 58 69 80 1 12 23 34 45 369
2: 57 68 79 9 11 22 33 44 46 369
3: 67 78 8 10 21 32 43 54 56 369
4: 77 7 18 20 31 42 53 55 66 369
5: 6 17 19 30 41 52 63 65 76 369
6: 16 27 29 40 51 62 64 75 5 369
7: 26 28 39 50 61 72 74 4 15 369
8: 36 38 49 60 71 73 3 14 25 369
9: 37 48 59 70 81 2 13 24 35 369
K= 10
1: 92 99 1 8 15 67 74 51 58 40 505
2: 98 80 7 14 16 73 55 57 64 41 505
3: 4 81 88 20 22 54 56 63 70 47 505
4: 85 87 19 21 3 60 62 69 71 28 505
5: 86 93 25 2 9 61 68 75 52 34 505
6: 17 24 76 83 90 42 49 26 33 65 505
7: 23 5 82 89 91 48 30 32 39 66 505
8: 79 6 13 95 97 29 31 38 45 72 505
9: 10 12 94 96 78 35 37 44 46 53 505
|
|
10: |
11 18 100 77 84 36 43 50 27 59 505
|
|