Vorige Pagina About the Author

' Searches for 4 x 4 Magic Squares of Squares
' Parametric Solutions (Euler)

' Tested with Office 365 under Windows 11

Sub SqrsSqr4c()

Dim a1(16)   'Non Quadreatic Terms (Intermediate)
Dim a2(16)   'Quadreatic Terms
Dim s2(10)

y = MsgBox("Locked", vbCritical, "Routine Euler4a")
End
    
    n1 = 0: n9 = 0: k1 = 1: k2 = 1
    
    Sheets("Klad1").Select
  
    t1 = Timer

'   Define Parameter Ranges
   
    ma1 = 1: ma2 = 9
    mb1 = 1: mb2 = 25:       'k
    mc1 = 5: mc2 = 18:       'mc1 > 0
    md1 = 0: md2 = 4:
    mp1 = 1: mp2 = 6
    mq1 = 2: mq2 = 8:
    mr1 = 6: mr2 = 21:
    ms1 = -12: ms2 = -3:
   
For a = ma1 To ma2
For c = mc1 To mc2
For d = md1 To md2
For p = mp1 To mp2
For q = mq1 To mq2
For r = mr1 To mr2
For s = ms1 To ms2

For b = mb1 To mb2

    GoSub 100: If fl1 = 0 Then GoTo 5   'Initiate Model

''  GoSub 900: ''If fl1 = 0 Then GoTo 5   'Check if only odd or even numbers (Option)    
''  If n10 < 14 Then GoTo 5

    For i1 = 1 To 16
        a2(i1) = a1(i1) ^ 2
    Next i1

'   Check identical integers

    GoSub 800: If fl1 = 0 Then GoTo 5

'   Check Magic Properties a2()

    GoSub 850: If fl1 = 0 Then GoTo 5
    
    n9 = n9 + 1: GoSub 650             'Print (Squared) Integers
''  n9 = n9 + 1: GoSub 700             'Print parameters

5

    Next b

    Next s
    Next r
    Next q
    Next p
    Next d
    Next c
    Next a

    t2 = Timer
    
    t10 = Str(t2 - t1) + " sec., " + Str(n9) + " Solutions"
    y = MsgBox(t10, 0, "Routine Euler4a")

End

'   Non Quadreatic Terms (Intermediate)

100 fl1 = 1

    Chk1 = (p * r + q * s)
    If Chk1 <> 0 Then fl1 = 0: Return

    chk21 = (b * (p * q + r * s) + d * (p * s + q * r)) 'Prevent devision by zero
    If chk21 = 0 Then fl1 = 0: Return

    Chk2 = (-d * (p * q + r * s) - b * (p * s + q * r)) / (b * (p * q + r * s) + d * (p * s + q * r))
    If Chk2 <> (a / c) Then fl1 = 0: Return

    s20 = (a ^ 2 + b ^ 2 + c ^ 2 + d ^ 2) * (p ^ 2 + q ^ 2 + r ^ 2 + s ^ 2)

    a1(1) = (a * p + b * q + c * r + d * s)
    a1(2) = (a * r - b * s - c * p + d * q)
    a1(3) = (-a * s - b * r + c * q + d * p)
    a1(4) = (a * q - b * p + c * s - d * r)
        
    a1(5) = (-a * q + b * p + c * s - d * r)
    a1(6) = (a * s + b * r + c * q + d * p)
    a1(7) = (a * r - b * s + c * p - d * q)
    a1(8) = (a * p + b * q - c * r - d * s)
        
    a1(9) = (a * r + b * s - c * p - d * q)
    a1(10) = (-a * p + b * q - c * r + d * s)
    a1(11) = (a * q + b * p + c * s + d * r)
    a1(12) = (a * s - b * r - c * q + d * p)
        
    a1(13) = (-a * s + b * r - c * q + d * p)
    a1(14) = (-a * q - b * p + c * s + d * r)
    a1(15) = (-a * p + b * q + c * r - d * s)
    a1(16) = (a * r + b * s + c * p + d * q)

    Return
    
'   Print results (squares)
    
650 n1 = n1 + 1
    If n1 = 5 Then
        n1 = 1: k1 = k1 + 5: k2 = 1
    Else
        If n9 > 1 Then k2 = k2 + 5
    End If
    
    Cells(k1, k2 + 1).Font.Color = -4165632
    Cells(k1, k2 + 1).Value = n9
    Cells(k1, k2 + 2).Value = s20
    Cells(k1, k2 + 4).Value = b
    
    i3 = 0
    For i1 = 1 To 4
        For i2 = 1 To 4
            i3 = i3 + 1
''            Cells(k1 + i1, k2 + i2).Value = a2(i3)
            Cells(k1 + i1, k2 + i2).Value = Sqr(a2(i3))
        Next i2
    Next i1
    Return
    
'   Print Parameters

700

    Cells(n9, 1).Value = a
    Cells(n9, 2).Value = b
    Cells(n9, 3).Value = c
    Cells(n9, 4).Value = d
    Cells(n9, 5).Value = p
    Cells(n9, 6).Value = q
    Cells(n9, 7).Value = r
    Cells(n9, 8).Value = s
    Cells(n9, 9).Value = s20
    Cells(n9, 10).Value = n9
    Cells(1, 11).Value = n9
    
    Return
    
'   Print Square (line format)
    
750 For i1 = 10 To 25
        Cells(n9, 9).Value = Sqr(a2(i1 - 9))
    Next i1

    Return

'   Exclude solutions with identical (squared) numbers

800 fl1 = 1
    For j1 = 1 To 16
       a20 = a2(j1)
       For j2 = (1 + j1) To 16
           If a20 = a2(j2) Then fl1 = 0: Return
       Next j2
    Next j1
    Return

'   Check Magic Squares of Sqiares a2()

850 fl1 = 1
    
    s2(1) = a2(1) + a2(2) + a2(3) + a2(4)
''  s20 = s2(1)
    s2(2) = a2(5) + a2(6) + a2(7) + a2(8)
    s2(3) = a2(9) + a2(10) + a2(11) + a2(12)
    s2(4) = a2(13) + a2(14) + a2(15) + a2(16)
    
    s2(5) = a2(1) + a2(5) + a2(9) + a2(13)
    s2(6) = a2(2) + a2(6) + a2(10) + a2(14)
    s2(7) = a2(3) + a2(7) + a2(11) + a2(15)
    s2(8) = a2(4) + a2(8) + a2(12) + a2(16)
    
    s2(9) = a2(1) + a2(6) + a2(11) + a2(16)
    s2(10) = a2(4) + a2(7) + a2(10) + a2(13)

    For j20 = 1 To 10
        If s2(j20) <> s20 Then fl1 = 0: Return
    Next j20

    Return
    
'   Count Odd or even Numbers
    
900 fl1 = 0

    n10 = 0
    For i1 = 1 To 16
        If CInt(a1(i1) / 2) <> a1(i1) / 2 Then n10 = n10 + 1  'is odd
''      If CInt(a1(i1) / 2) = a1(i1) / 2 Then n10 = n10 + 1   'is even
    Next i1

    Return
  
End Sub     

Vorige Pagina About the Author