Vorige Pagina About the Author

' 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

Vorige Pagina About the Author