' Generates Order 8 Pan Magic Complete Medjig - and Order 16 Pan Magic Complete Bimagic Squares
' Tested with Office 365 under Windows 10
Sub MgcSqr16b()
Dim a(256), b(256), c(256), s(128)
y = MsgBox("Locked", vbCritical, "Routine MgcSqr16b")
End
n2 = 0: n9 = 0: k1 = 1: k2 = 1
m1 = 1: m2 = 4: s1 = 40: s2 = 120: s3 = 1260: p1 = s1 / 8
s16a = 2056: s16b = 351576
ShtNm1 = "Complete8" 'Order 8 Bimagic Squares, Pan Magic, Complete
' Generate Bi,agic Squares
Sheets("Klad1").Select
t1 = Timer
For j100 = 2 To 10497
Cells(1, 1).Value = j100
n16 = Sheets(ShtNm1).Cells(j100, 66).Value
If n16 = 0 Then GoTo 1000 'Deactivate for Inventarisation step 1
i1 = -1: i2 = 0
For i0 = 1 To 64
x = Sheets(ShtNm1).Cells(j100, i0).Value - 1
i1 = i1 + 2: i3 = i2 * 16 + i1
If i1 = 15 Then i2 = i2 + 2: i1 = -1
b(i3) = x: b(i3 + 1) = x
b(i3 + 16) = x: b(i3 + 17) = x
Next i0
n10 = 0: n11 = 0: n12 = 0
For j256 = m1 To m2 'a(256)
a(256) = j256
For j255 = m1 To m2 'a(255)
a(255) = j255
If a(255) = a(256) Then GoTo 2550
For j254 = m1 To m2 'a(254)
a(254) = j254
For j253 = m1 To m2 'a(253)
a(253) = j253
If a(253) = a(254) Then GoTo 2530
For j252 = m1 To m2 'a(252)
a(252) = j252
For j251 = m1 To m2 'a(251)
a(251) = j251
If a(251) = a(252) Then GoTo 2510
For j250 = m1 To m2 'a(250)
a(250) = j250
a(249) = s1 / 2 - a(250) - a(251) - a(252) - a(253) - a(254) - a(255) - a(256):
If a(249) < m1 Or a(249) > m2 Then GoTo 2500:
If a(249) = a(250) Then GoTo 2500
For j248 = m1 To m2 'a(248)
a(248) = j248
a(247) = s1 / 4 - a(248) - a(255) - a(256): If a(247) < m1 Or a(247) > m2 Then GoTo 2480:
If a(247) = a(248) Then GoTo 2480
a(246) = a(248) - a(254) + a(256): If a(246) < m1 Or a(246) > m2 Then GoTo 2480:
a(245) = s1 / 4 - a(248) - a(253) - a(256): If a(245) < m1 Or a(245) > m2 Then GoTo 2480:
If a(245) = a(246) Then GoTo 2480
a(244) = a(248) - a(252) + a(256): If a(244) < m1 Or a(244) > m2 Then GoTo 2480:
a(243) = s1 / 4 - a(248) - a(251) - a(256): If a(243) < m1 Or a(243) > m2 Then GoTo 2480:
If a(243) = a(244) Then GoTo 2480
a(242) = a(248) - a(250) + a(256): If a(242) < m1 Or a(242) > m2 Then GoTo 2480:
a(241) = -s1 / 4 - a(248) + a(250) + a(251) + a(252) + a(253) + a(254) + a(255):
If a(241) < m1 Or a(241) > m2 Then GoTo 2480:
If a(241) = a(242) Then GoTo 2480
m11 = 241: m21 = 256: GoSub 2700: If fl1 = 0 Then GoTo 2480 'Check row 1
a(113) = p1 - a(249): a(114) = p1 - a(250): a(115) = p1 - a(251): a(116) = p1 - a(252):
a(117) = p1 - a(253): a(118) = p1 - a(254): a(119) = p1 - a(255): a(120) = p1 - a(256):
a(121) = p1 - a(241): a(122) = p1 - a(242): a(123) = p1 - a(243): a(124) = p1 - a(244):
a(125) = p1 - a(245): a(126) = p1 - a(246): a(127) = p1 - a(247): a(128) = p1 - a(248):
m11 = 113: m21 = 128: GoSub 2700: If fl1 = 0 Then GoTo 2480 'Check row 9
For j240 = m1 To m2 'a(240)
a(240) = j240
If a(240) = a(255) Or a(240) = a(256) Then GoTo 2400
a(239) = s1 / 4 - a(240) - a(255) - a(256): If a(239) < m1 Or a(239) > m2 Then GoTo 2400:
If a(239) = a(240) Or a(239) = a(255) Or a(239) = a(256) Then GoTo 2400
a(238) = a(240) - a(254) + a(256): If a(238) < m1 Or a(238) > m2 Then GoTo 2400:
If a(238) = a(253) Or a(238) = a(254) Then GoTo 2400
a(237) = s1 / 4 - a(240) - a(253) - a(256): If a(237) < m1 Or a(237) > m2 Then GoTo 2400:
If a(237) = a(238) Or a(237) = a(253) Or a(237) = a(254) Then GoTo 2400
a(236) = a(240) - a(252) + a(256): If a(236) < m1 Or a(236) > m2 Then GoTo 2400:
If a(236) = a(251) Or a(236) = a(252) Then GoTo 2400
a(235) = s1 / 4 - a(240) - a(251) - a(256): If a(235) < m1 Or a(235) > m2 Then GoTo 2400:
If a(235) = a(236) Or a(235) = a(251) Or a(235) = a(252) Then GoTo 2400
a(234) = a(240) - a(250) + a(256): If a(234) < m1 Or a(234) > m2 Then GoTo 2400:
If a(234) = a(249) Or a(234) = a(250) Then GoTo 2400
a(233) = -s1 / 4 - a(240) + a(250) + a(251) + a(252) + a(253) + a(254) + a(255):
If a(233) < m1 Or a(233) > m2 Then GoTo 2400:
If a(233) = a(234) Or a(233) = a(249) Or a(233) = a(250) Then GoTo 2400
a(232) = a(240) - a(248) + a(256): If a(232) < m1 Or a(232) > m2 Then GoTo 2400:
If a(232) = a(247) Or a(232) = a(248) Then GoTo 2400
a(231) = -a(240) + a(248) + a(255): If a(231) < m1 Or a(231) > m2 Then GoTo 2400:
If a(231) = a(232) Or a(231) = a(247) Or a(231) = a(248) Then GoTo 2400
a(230) = a(240) - a(248) + a(254): If a(230) < m1 Or a(230) > m2 Then GoTo 2400:
If a(230) = a(245) Or a(230) = a(246) Then GoTo 2400
a(229) = -a(240) + a(248) + a(253): If a(229) < m1 Or a(229) > m2 Then GoTo 2400:
If a(229) = a(230) Or a(229) = a(245) Or a(229) = a(246) Then GoTo 2400
a(228) = a(240) - a(248) + a(252): If a(228) < m1 Or a(228) > m2 Then GoTo 2400:
If a(228) = a(243) Or a(228) = a(244) Then GoTo 2400
a(227) = -a(240) + a(248) + a(251): If a(227) < m1 Or a(227) > m2 Then GoTo 2400:
If a(227) = a(228) Or a(227) = a(243) Or a(227) = a(244) Then GoTo 2400
a(226) = a(240) - a(248) + a(250): If a(226) < m1 Or a(226) > m2 Then GoTo 2400:
If a(226) = a(241) Or a(226) = a(242) Then GoTo 2400
a(225) = s1 / 2 - a(240) + a(248) - a(250) - a(251) - a(252) - a(253) - a(254) - a(255) - a(256):
If a(225) < m1 Or a(225) > m2 Then GoTo 2400:
If a(225) = a(226) Or a(225) = a(241) Or a(225) = a(242) Then GoTo 2400
m11 = 225: m21 = 240: GoSub 2700: If fl1 = 0 Then GoTo 2400 'Check row 2
a(97) = p1 - a(233): a(98) = p1 - a(234): a(99) = p1 - a(235): a(100) = p1 - a(236):
a(101) = p1 - a(237): a(102) = p1 - a(238): a(103) = p1 - a(239): a(104) = p1 - a(240):
a(105) = p1 - a(225): a(106) = p1 - a(226): a(107) = p1 - a(227): a(108) = p1 - a(228):
a(109) = p1 - a(229): a(110) = p1 - a(230): a(111) = p1 - a(231): a(112) = p1 - a(232):
m11 = 97: m21 = 112: GoSub 2700: If fl1 = 0 Then GoTo 2400 'Check row 10
For j224 = m1 To m2 'a(224)
a(224) = j224
a(223) = -a(224) + a(255) + a(256): If a(223) < m1 Or a(223) > m2 Then GoTo 2240:
If a(223) = a(224) Then GoTo 2240
a(222) = a(224) + a(254) - a(256): If a(222) < m1 Or a(222) > m2 Then GoTo 2240:
a(221) = -a(224) + a(253) + a(256): If a(221) < m1 Or a(221) > m2 Then GoTo 2240:
If a(221) = a(222) Then GoTo 2240
a(220) = a(224) + a(252) - a(256): If a(220) < m1 Or a(220) > m2 Then GoTo 2240:
a(219) = -a(224) + a(251) + a(256): If a(219) < m1 Or a(219) > m2 Then GoTo 2240:
If a(219) = a(220) Then GoTo 2240
a(218) = a(224) + a(250) - a(256): If a(218) < m1 Or a(218) > m2 Then GoTo 2240:
a(217) = s1 / 2 - a(224) - a(250) - a(251) - a(252) - a(253) - a(254) - a(255):
If a(217) < m1 Or a(217) > m2 Then GoTo 2240:
If a(217) = a(218) Then GoTo 2240
a(216) = a(224) + a(248) - a(256): If a(216) < m1 Or a(216) > m2 Then GoTo 2240:
a(215) = s1 / 4 - a(224) - a(248) - a(255): If a(215) < m1 Or a(215) > m2 Then GoTo 2240:
If a(215) = a(216) Then GoTo 2240
a(214) = a(224) + a(248) - a(254): If a(214) < m1 Or a(214) > m2 Then GoTo 2240:
a(213) = s1 / 4 - a(224) - a(248) - a(253): If a(213) < m1 Or a(213) > m2 Then GoTo 2240:
If a(213) = a(214) Then GoTo 2240
a(212) = a(224) + a(248) - a(252): If a(212) < m1 Or a(212) > m2 Then GoTo 2240:
a(211) = s1 / 4 - a(224) - a(248) - a(251): If a(211) < m1 Or a(211) > m2 Then GoTo 2240:
If a(211) = a(212) Then GoTo 2240
a(210) = a(224) + a(248) - a(250): If a(210) < m1 Or a(210) > m2 Then GoTo 2240:
a(209) = -s1 / 4 - a(224) - a(248) + a(250) + a(251) + a(252) + a(253) + a(254) + a(255) + a(256):
If a(209) < m1 Or a(209) > m2 Then GoTo 2240:
If a(209) = a(210) Then GoTo 2240
m11 = 209: m21 = 224: GoSub 2700: If fl1 = 0 Then GoTo 2240 'Check row 3
a(81) = p1 - a(217): a(82) = p1 - a(218): a(83) = p1 - a(219): a(84) = p1 - a(220):
a(85) = p1 - a(221): a(86) = p1 - a(222): a(87) = p1 - a(223): a(88) = p1 - a(224):
a(89) = p1 - a(209): a(90) = p1 - a(210): a(91) = p1 - a(211): a(92) = p1 - a(212):
a(93) = p1 - a(213): a(94) = p1 - a(214): a(95) = p1 - a(215): a(96) = p1 - a(216):
m11 = 81: m21 = 96: GoSub 2700: If fl1 = 0 Then GoTo 2240 'Check row 11
For j208 = m1 To m2 'a(208)
a(208) = j208
If a(208) = a(223) Or a(208) = a(224) Then GoTo 2080
a(207) = s1 / 4 - a(208) - a(255) - a(256): If a(207) < m1 Or a(207) > m2 Then GoTo 2080:
If a(207) = a(208) Or a(207) = a(223) Or a(207) = a(224) Then GoTo 2080
a(206) = a(208) - a(254) + a(256): If a(206) < m1 Or a(206) > m2 Then GoTo 2080:
If a(206) = a(221) Or a(206) = a(222) Then GoTo 2080
a(205) = s1 / 4 - a(208) - a(253) - a(256): If a(205) < m1 Or a(205) > m2 Then GoTo 2080:
If a(205) = a(206) Or a(205) = a(221) Or a(205) = a(222) Then GoTo 2080
a(204) = a(208) - a(252) + a(256): If a(204) < m1 Or a(204) > m2 Then GoTo 2080:
If a(204) = a(219) Or a(204) = a(220) Then GoTo 2080
a(203) = s1 / 4 - a(208) - a(251) - a(256): If a(203) < m1 Or a(203) > m2 Then GoTo 2080:
If a(203) = a(204) Or a(203) = a(219) Or a(203) = a(220) Then GoTo 2080
a(202) = a(208) - a(250) + a(256): If a(202) < m1 Or a(202) > m2 Then GoTo 2080:
If a(202) = a(217) Or a(202) = a(218) Then GoTo 2080
a(201) = -s1 / 4 - a(208) + a(250) + a(251) + a(252) + a(253) + a(254) + a(255):
If a(201) < m1 Or a(201) > m2 Then GoTo 2080:
If a(201) = a(202) Or a(201) = a(217) Or a(201) = a(218) Then GoTo 2080
a(200) = a(208) - a(248) + a(256): If a(200) < m1 Or a(200) > m2 Then GoTo 2080:
If a(200) = a(215) Or a(200) = a(216) Then GoTo 2080
a(199) = -a(208) + a(248) + a(255): If a(199) < m1 Or a(199) > m2 Then GoTo 2080:
If a(199) = a(200) Or a(199) = a(215) Or a(199) = a(216) Then GoTo 2080
a(198) = a(208) - a(248) + a(254): If a(198) < m1 Or a(198) > m2 Then GoTo 2080:
If a(198) = a(213) Or a(198) = a(214) Then GoTo 2080
a(197) = -a(208) + a(248) + a(253): If a(197) < m1 Or a(197) > m2 Then GoTo 2080:
If a(197) = a(198) Or a(197) = a(213) Or a(197) = a(214) Then GoTo 2080
a(196) = a(208) - a(248) + a(252): If a(196) < m1 Or a(196) > m2 Then GoTo 2080:
If a(196) = a(211) Or a(196) = a(212) Then GoTo 2080
a(195) = -a(208) + a(248) + a(251): If a(195) < m1 Or a(195) > m2 Then GoTo 2080:
If a(195) = a(196) Or a(195) = a(211) Or a(195) = a(212) Then GoTo 2080
a(194) = a(208) - a(248) + a(250): If a(194) < m1 Or a(194) > m2 Then GoTo 2080:
If a(194) = a(209) Or a(194) = a(210) Then GoTo 2080
a(193) = s1 / 2 - a(208) + a(248) - a(250) - a(251) - a(252) - a(253) - a(254) - a(255) - a(256):
If a(193) < m1 Or a(193) > m2 Then GoTo 2080:
If a(193) = a(194) Or a(193) = a(209) Or a(193) = a(210) Then GoTo 2080
m11 = 193: m21 = 208: GoSub 2700: If fl1 = 0 Then GoTo 2080 'Check row 4
a(65) = p1 - a(201): a(66) = p1 - a(202): a(67) = p1 - a(203): a(68) = p1 - a(204):
a(69) = p1 - a(205): a(70) = p1 - a(206): a(71) = p1 - a(207): a(72) = p1 - a(208):
a(73) = p1 - a(193): a(74) = p1 - a(194): a(75) = p1 - a(195): a(76) = p1 - a(196):
a(77) = p1 - a(197): a(78) = p1 - a(198): a(79) = p1 - a(199): a(80) = p1 - a(200):
m11 = 65: m21 = 80: GoSub 2700: If fl1 = 0 Then GoTo 2080 'Check row 12
For j192 = m1 To m2 'a(192)
a(192) = j192
a(191) = -a(192) + a(255) + a(256): If a(191) < m1 Or a(191) > m2 Then GoTo 1920:
If a(191) = a(192) Then GoTo 1920
a(190) = a(192) + a(254) - a(256): If a(190) < m1 Or a(190) > m2 Then GoTo 1920:
a(189) = -a(192) + a(253) + a(256): If a(189) < m1 Or a(189) > m2 Then GoTo 1920:
If a(189) = a(190) Then GoTo 1920
a(188) = a(192) + a(252) - a(256): If a(188) < m1 Or a(188) > m2 Then GoTo 1920:
a(187) = -a(192) + a(251) + a(256): If a(187) < m1 Or a(187) > m2 Then GoTo 1920:
If a(187) = a(188) Then GoTo 1920
a(186) = a(192) + a(250) - a(256): If a(186) < m1 Or a(186) > m2 Then GoTo 1920:
a(185) = s1 / 2 - a(192) - a(250) - a(251) - a(252) - a(253) - a(254) - a(255):
If a(185) < m1 Or a(185) > m2 Then GoTo 1920:
If a(185) = a(186) Then GoTo 1920
a(184) = a(192) + a(248) - a(256): If a(184) < m1 Or a(184) > m2 Then GoTo 1920:
a(183) = s1 / 4 - a(192) - a(248) - a(255): If a(183) < m1 Or a(183) > m2 Then GoTo 1920:
If a(183) = a(184) Then GoTo 1920
a(182) = a(192) + a(248) - a(254): If a(182) < m1 Or a(182) > m2 Then GoTo 1920:
a(181) = s1 / 4 - a(192) - a(248) - a(253): If a(181) < m1 Or a(181) > m2 Then GoTo 1920:
If a(181) = a(182) Then GoTo 1920
a(180) = a(192) + a(248) - a(252): If a(180) < m1 Or a(180) > m2 Then GoTo 1920:
a(179) = s1 / 4 - a(192) - a(248) - a(251): If a(179) < m1 Or a(179) > m2 Then GoTo 1920:
If a(179) = a(180) Then GoTo 1920
a(178) = a(192) + a(248) - a(250): If a(178) < m1 Or a(178) > m2 Then GoTo 1920:
a(177) = -s1 / 4 - a(192) - a(248) + a(250) + a(251) + a(252) + a(253) + a(254) + a(255) + a(256):
If a(177) < m1 Or a(177) > m2 Then GoTo 1920:
If a(177) = a(178) Then GoTo 1920
m11 = 177: m21 = 192: GoSub 2700: If fl1 = 0 Then GoTo 1920 'Check row 5
a(49) = p1 - a(185): a(50) = p1 - a(186): a(51) = p1 - a(187): a(52) = p1 - a(188):
a(53) = p1 - a(189): a(54) = p1 - a(190): a(55) = p1 - a(191): a(56) = p1 - a(192):
a(57) = p1 - a(177): a(58) = p1 - a(178): a(59) = p1 - a(179): a(60) = p1 - a(180):
a(61) = p1 - a(181): a(62) = p1 - a(182): a(63) = p1 - a(183): a(64) = p1 - a(184):
m11 = 49: m21 = 64: GoSub 2700: If fl1 = 0 Then GoTo 1920 'Check row 13
For j176 = m1 To m2 'a(176)
a(176) = j176
If a(176) = a(191) Or a(176) = a(192) Then GoTo 1760
a(175) = s1 / 4 - a(176) - a(255) - a(256): If a(175) < m1 Or a(175) > m2 Then GoTo 1760:
If a(175) = a(176) Or a(175) = a(191) Or a(175) = a(192) Then GoTo 1760
a(174) = a(176) - a(254) + a(256): If a(174) < m1 Or a(174) > m2 Then GoTo 1760:
If a(174) = a(189) Or a(174) = a(190) Then GoTo 1760
a(173) = s1 / 4 - a(176) - a(253) - a(256): If a(173) < m1 Or a(173) > m2 Then GoTo 1760:
If a(173) = a(174) Or a(173) = a(189) Or a(173) = a(190) Then GoTo 1760
a(172) = a(176) - a(252) + a(256): If a(172) < m1 Or a(172) > m2 Then GoTo 1760:
If a(172) = a(187) Or a(172) = a(188) Then GoTo 1760
a(171) = s1 / 4 - a(176) - a(251) - a(256): If a(171) < m1 Or a(171) > m2 Then GoTo 1760:
If a(171) = a(172) Or a(171) = a(187) Or a(171) = a(188) Then GoTo 1760
a(170) = a(176) - a(250) + a(256): If a(170) < m1 Or a(170) > m2 Then GoTo 1760:
If a(170) = a(185) Or a(170) = a(186) Then GoTo 1760
a(169) = -s1 / 4 - a(176) + a(250) + a(251) + a(252) + a(253) + a(254) + a(255):
If a(169) < m1 Or a(169) > m2 Then GoTo 1760:
If a(169) = a(170) Or a(169) = a(185) Or a(169) = a(186) Then GoTo 1760
a(168) = a(176) - a(248) + a(256): If a(168) < m1 Or a(168) > m2 Then GoTo 1760:
If a(168) = a(183) Or a(168) = a(184) Then GoTo 1760
a(167) = -a(176) + a(248) + a(255): If a(167) < m1 Or a(167) > m2 Then GoTo 1760:
If a(167) = a(168) Or a(167) = a(183) Or a(167) = a(184) Then GoTo 1760
a(166) = a(176) - a(248) + a(254): If a(166) < m1 Or a(166) > m2 Then GoTo 1760:
If a(166) = a(181) Or a(166) = a(182) Then GoTo 1760
a(165) = -a(176) + a(248) + a(253): If a(165) < m1 Or a(165) > m2 Then GoTo 1760:
If a(165) = a(166) Or a(165) = a(181) Or a(165) = a(182) Then GoTo 1760
a(164) = a(176) - a(248) + a(252): If a(164) < m1 Or a(164) > m2 Then GoTo 1760:
If a(164) = a(179) Or a(164) = a(180) Then GoTo 1760
a(163) = -a(176) + a(248) + a(251): If a(163) < m1 Or a(163) > m2 Then GoTo 1760:
If a(163) = a(164) Or a(163) = a(179) Or a(163) = a(180) Then GoTo 1760
a(162) = a(176) - a(248) + a(250): If a(162) < m1 Or a(162) > m2 Then GoTo 1760:
If a(162) = a(177) Or a(162) = a(178) Then GoTo 1760
a(161) = s1 / 2 - a(176) + a(248) - a(250) - a(251) - a(252) - a(253) - a(254) - a(255) - a(256):
If a(161) < m1 Or a(161) > m2 Then GoTo 1760:
If a(161) = a(162) Or a(161) = a(177) Or a(161) = a(178) Then GoTo 1760
m11 = 161: m21 = 176: GoSub 2700: If fl1 = 0 Then GoTo 1760 'Check row 6
a(33) = p1 - a(169): a(34) = p1 - a(170): a(35) = p1 - a(171): a(36) = p1 - a(172):
a(37) = p1 - a(173): a(38) = p1 - a(174): a(39) = p1 - a(175): a(40) = p1 - a(176):
a(41) = p1 - a(161): a(42) = p1 - a(162): a(43) = p1 - a(163): a(44) = p1 - a(164):
a(45) = p1 - a(165): a(46) = p1 - a(166): a(47) = p1 - a(167): a(48) = p1 - a(168):
m11 = 33: m21 = 48: GoSub 2700: If fl1 = 0 Then GoTo 1760 'Check row 14
For j160 = m1 To m2 'a(160)
a(160) = j160
a(159) = -a(160) + a(255) + a(256): If a(159) < m1 Or a(159) > m2 Then GoTo 1600:
If a(159) = a(160) Then GoTo 1600
a(158) = a(160) + a(254) - a(256): If a(158) < m1 Or a(158) > m2 Then GoTo 1600:
a(157) = -a(160) + a(253) + a(256): If a(157) < m1 Or a(157) > m2 Then GoTo 1600:
If a(157) = a(158) Then GoTo 1600
a(156) = a(160) + a(252) - a(256): If a(156) < m1 Or a(156) > m2 Then GoTo 1600:
a(155) = -a(160) + a(251) + a(256): If a(155) < m1 Or a(155) > m2 Then GoTo 1600:
If a(155) = a(156) Then GoTo 1600
a(154) = a(160) + a(250) - a(256): If a(154) < m1 Or a(154) > m2 Then GoTo 1600:
a(153) = s1 / 2 - a(160) - a(250) - a(251) - a(252) - a(253) - a(254) - a(255):
If a(153) < m1 Or a(153) > m2 Then GoTo 1600:
If a(153) = a(154) Then GoTo 1600
a(152) = a(160) + a(248) - a(256): If a(152) < m1 Or a(152) > m2 Then GoTo 1600:
a(151) = s1 / 4 - a(160) - a(248) - a(255): If a(151) < m1 Or a(151) > m2 Then GoTo 1600:
If a(151) = a(152) Then GoTo 1600
a(150) = a(160) + a(248) - a(254): If a(150) < m1 Or a(150) > m2 Then GoTo 1600:
a(149) = s1 / 4 - a(160) - a(248) - a(253): If a(149) < m1 Or a(149) > m2 Then GoTo 1600:
If a(149) = a(150) Then GoTo 1600
a(148) = a(160) + a(248) - a(252): If a(148) < m1 Or a(148) > m2 Then GoTo 1600:
a(147) = s1 / 4 - a(160) - a(248) - a(251): If a(147) < m1 Or a(147) > m2 Then GoTo 1600:
If a(147) = a(148) Then GoTo 1600
a(146) = a(160) + a(248) - a(250): If a(146) < m1 Or a(146) > m2 Then GoTo 1600:
a(145) = -s1 / 4 - a(160) - a(248) + a(250) + a(251) + a(252) + a(253) + a(254) + a(255) + a(256):
If a(145) < m1 Or a(145) > m2 Then GoTo 1600:
If a(145) = a(146) Then GoTo 1600
m11 = 145: m21 = 160: GoSub 2700: If fl1 = 0 Then GoTo 1600 'Check row 7
a(17) = p1 - a(153): a(18) = p1 - a(154): a(19) = p1 - a(155): a(20) = p1 - a(156):
a(21) = p1 - a(157): a(22) = p1 - a(158): a(23) = p1 - a(159): a(24) = p1 - a(160):
a(25) = p1 - a(145): a(26) = p1 - a(146): a(27) = p1 - a(147): a(28) = p1 - a(148):
a(29) = p1 - a(149): a(30) = p1 - a(150): a(31) = p1 - a(151): a(32) = p1 - a(152):
m11 = 17: m21 = 32: GoSub 2700: If fl1 = 0 Then GoTo 1600 'Check row 15
a(144) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(256):
If a(144) < m1 Or a(144) > m2 Then GoTo 1600:
If a(144) = a(159) Or a(144) = a(160) Then GoTo 1600
a(143) = -s1 / 4 + a(160) + a(176) + a(192) + a(208) + a(224) + a(240) - a(255):
If a(143) < m1 Or a(143) > m2 Then GoTo 1600:
If a(143) = a(144) Or a(143) = a(159) Or a(143) = a(160) Then GoTo 1600
a(142) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(254):
If a(142) < m1 Or a(142) > m2 Then GoTo 1600:
If a(142) = a(157) Or a(142) = a(158) Then GoTo 1600
a(141) = -s1 / 4 + a(160) + a(176) + a(192) + a(208) + a(224) + a(240) - a(253):
If a(141) < m1 Or a(141) > m2 Then GoTo 1600:
If a(141) = a(142) Or a(141) = a(157) Or a(141) = a(158) Then GoTo 1600
a(140) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(252):
If a(140) < m1 Or a(140) > m2 Then GoTo 1600:
If a(140) = a(155) Or a(140) = a(156) Then GoTo 1600
a(139) = -s1 / 4 + a(160) + a(176) + a(192) + a(208) + a(224) + a(240) - a(251):
If a(139) < m1 Or a(139) > m2 Then GoTo 1600:
If a(139) = a(140) Or a(139) = a(155) Or a(139) = a(156) Then GoTo 1600
a(138) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(250):
If a(138) < m1 Or a(138) > m2 Then GoTo 1600:
If a(138) = a(153) Or a(138) = a(154) Then GoTo 1600
a(137) = -6*s1/8+a(160)+a(176)+a(192)+a(208)+a(224)+a(240)+a(250)+a(251)+a(252)+a(253)+a(254)+a(255) +a(256):
If a(137) < m1 Or a(137) > m2 Then GoTo 1600:
If a(137) = a(138) Or a(137) = a(153) Or a(137) = a(154) Then GoTo 1600
a(136) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(248):
If a(136) < m1 Or a(136) > m2 Then GoTo 1600:
If a(136) = a(151) Or a(136) = a(152) Then GoTo 1600
a(135) = -s1 / 2 + a(160) + a(176) + a(192) + a(208) + a(224) + a(240) + a(248) + a(255) + a(256):
If a(135) < m1 Or a(135) > m2 Then GoTo 1600:
If a(135) = a(136) Or a(135) = a(151) Or a(135) = a(152) Then GoTo 1600
a(134) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(248) + a(254) - a(256):
If a(134) < m1 Or a(134) > m2 Then GoTo 1600:
If a(134) = a(149) Or a(134) = a(150) Then GoTo 1600
a(133) = -s1 / 2 + a(160) + a(176) + a(192) + a(208) + a(224) + a(240) + a(248) + a(253) + a(256):
If a(133) < m1 Or a(133) > m2 Then GoTo 1600:
If a(133) = a(134) Or a(133) = a(149) Or a(133) = a(150) Then GoTo 1600
a(132) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(248) + a(252) - a(256):
If a(132) < m1 Or a(132) > m2 Then GoTo 1600:
If a(132) = a(147) Or a(132) = a(148) Then GoTo 1600
a(131) = -s1 / 2 + a(160) + a(176) + a(192) + a(208) + a(224) + a(240) + a(248) + a(251) + a(256):
If a(131) < m1 Or a(131) > m2 Then GoTo 1600:
If a(131) = a(132) Or a(131) = a(147) Or a(131) = a(148) Then GoTo 1600
a(130) = s1 / 2 - a(160) - a(176) - a(192) - a(208) - a(224) - a(240) - a(248) + a(250) - a(256):
If a(130) < m1 Or a(130) > m2 Then GoTo 1600:
If a(130) = a(145) Or a(130) = a(146) Then GoTo 1600
a(129) = a(160)+a(176)+a(192)+a(208)+a(224)+a(240)+a(248)-a(250) - a(251)-a(252)-a(253)- a(254) -a(255):
If a(129) < m1 Or a(129) > m2 Then GoTo 1600:
If a(129) = a(130) Or a(129) = a(145) Or a(129) = a(146) Then GoTo 1600
m11 = 129: m21 = 144: GoSub 2700: If fl1 = 0 Then GoTo 1600 'Check row 8
a(1) = p1 - a(137): a(2) = p1 - a(138): a(3) = p1 - a(139): a(4) = p1 - a(140):
a(5) = p1 - a(141): a(6) = p1 - a(142): a(7) = p1 - a(143): a(8) = p1 - a(144):
a(9) = p1 - a(129): a(10) = p1 - a(130): a(11) = p1 - a(131): a(12) = p1 - a(132):
a(13) = p1 - a(133): a(14) = p1 - a(134): a(15) = p1 - a(135): a(16) = p1 - a(136):
m11 = 1: m21 = 16: GoSub 2700: If fl1 = 0 Then GoTo 1600 'Check row 16
GoSub 2750: If fl1 = 0 Then GoTo 1600 'Check diagonal 1, 2
GoSub 2770: If fl1 = 0 Then GoTo 1600 'Check columns 1 ... 16
n9 = n9 + 1 'Total
' GoSub 2650 'Print results (Aux Squares)
' GoSub 2655 'Print results (Bimagic Squares)
Cells(2, 1).Value = n9 'Counting
' n10 = n10 + 1 'Inventarisation step 1
' Sheets(ShtNm1).Cells(j100, 66).Value = n10
GoSub 3000 'Check Bimagic Semi Diagonals
1600 Next j160
1760 Next j176
1920 Next j192
2080 Next j208
2240 Next j224
2400 Next j240
2480 Next j248
2500 Next j250
2510 Next j251
2520 Next j252
2530 Next j253
2540 Next j254
2550 Next j255
2560 Next j256
1000 Next j100
t2 = Timer
t10 = Str(t2 - t1) + " sec., " + Str(n9) + " Solutions for sum" + Str(s1)
y = MsgBox(t10, 0, "Routine MgcSqr16b")
End
' Check Bimagic Semi Diagonals
3000
s(1)=c(9)^2+c(26)^2+c(43)^2+c(60)^2+c(77)^2+c(94)^2+c(111)^2+c(128)^2+c(129)^2 +
+ c(146)^2+c(163)^2+c(180)^2+c(197) ^ 2+ c(214)^2+c(231)^2+c(248)^2
s(2)=c(8)^2+c(23)^2+c(38)^2+c(53)^2+c(68)^2+c(83)^2+c(98)^2+c(113)^2+c(144)^2 +
+ c(159)^2+c(174)^2+c(189)^2+c(204) ^ 2 +c(219) ^ 2+c(234)^2+c(249)^2
fl1 = 1
For i1 = 1 To 2
If s(i1) <> 351576 Then fl1 = 0: Exit For
Next i1
If fl1 = 1 Then
n11 = n11 + 1
Sheets(ShtNm1).Cells(j100, 68).Value = n11
End If
Return
' Print results (squares)
2650 n2 = n2 + 1
If n2 = 3 Then
n2 = 1: k1 = k1 + 17: k2 = 1
Else
If n9 > 1 Then k2 = k2 + 17
End If
Cells(k1, k2 + 1).Font.Color = -4165632
Cells(k1, k2 + 1).Value = n9
i3 = 0
For i1 = 1 To 16
For i2 = 1 To 16
i3 = i3 + 1
Cells(k1 + i1, k2 + i2).Value = a(i3)
Next i2
Next i1
Return
' Print results (Bimagic Squares)
2655
For i1 = 1 To 256
c(i1) = 4 * b(i1) + a(i1)
Next i1
n2 = n2 + 1
If n2 = 3 Then
n2 = 1: k1 = k1 + 17: k2 = 1
Else
If n9 > 1 Then k2 = k2 + 17
End If
Cells(k1, k2 + 1).Font.Color = -4165632
Cells(k1, k2 + 1).Value = n9
i3 = 0
For i1 = 1 To 16
For i2 = 1 To 16
i3 = i3 + 1
Cells(k1 + i1, k2 + i2).Value = c(i3)
Next i2
Next i1
Return
' Check Row i (i = 1 ... 16)
2700 fl1 = 1
s21 = 0: s31 = 0
For i1 = m11 To m21
s21 = s21 + a(i1) ^ 2
s31 = s31 + a(i1) * b(i1)
Next i1
If s21 <> s2 Then fl1 = 0
If s31 <> s3 Then fl1 = 0: Return
Return
' Check Diagonals 1, 2
2750 fl1 = 1
s21 = 0: s31 = 0
For i1 = 1 To 256 Step 17
s21 = s21 + a(i1) ^ 2
s31 = s31 + a(i1) * b(i1)
Next i1
If s21 <> s2 Then fl1 = 0: Return
If s31 <> s3 Then fl1 = 0: Return
s21 = 0: s31 = 0
For i1 = 16 To 241 Step 15
s21 = s21 + a(i1) ^ 2
s31 = s31 + a(i1) * b(i1)
Next i1
If s21 <> s2 Then fl1 = 0: Return
If s31 <> s3 Then fl1 = 0: Return
Return
' Check Columns 1 ... 16
2770 fl1 = 1
For i2 = 1 To 16
s21 = 0: s31 = 0
m11 = i2: m21 = i2 + 240
s21 = 0
For i1 = m11 To m21 Step 16
s21 = s21 + a(i1) ^ 2
s31 = s31 + a(i1) * b(i1)
Next i1
If s21 <> s2 Then fl1 = 0: Return
If s31 <> s3 Then fl1 = 0: Return
Next i2
Return
End Sub