Public Function JacobiSymbol(a As Long, n AsLong) As Long
Dim ans As Long, r As Long
If a = 0 Then
If n = 1 Then ans = 1 Else ans = 0
ElseIf a=2 Then
r = n Mod 8
If r = 1 Or r = 7 Then
ans = 1
ElseIf r = 3Or r = 5 Then
ans = -1
End If
ElseIf a >= n Then
ans = JacobiSymbol((a Mod n), n)
ElseIf a Mod n = 0 Then
ans = JacobiSymbol(2, n) * JacobiSymbol(a/2, n)
Else
If a Mod 4 = 3 And n Mod 4 = 3 Then _
ans = -JacobiSymbol(n, a) Else ans = JacobiSymbol(n, a)
End If
JacobiSymbol = ans
End Function