83 lines
1.8 KiB
Plaintext
83 lines
1.8 KiB
Plaintext
Option Base 1
|
|
Private Function mi_one(ByVal a As Variant) As Variant
|
|
If IsArray(a) Then
|
|
a(1) = 1
|
|
Else
|
|
a = 1
|
|
End If
|
|
mi_one = a
|
|
End Function
|
|
|
|
Private Function mi_add(ByVal a As Variant, b As Variant) As Variant
|
|
If IsArray(a) Then
|
|
If IsArray(b) Then
|
|
If a(2) <> b(2) Then
|
|
mi_add = CVErr(2019)
|
|
Else
|
|
a(1) = (a(1) + b(1)) Mod a(2)
|
|
mi_add = a
|
|
End If
|
|
Else
|
|
mi_add = CVErr(2018)
|
|
End If
|
|
Else
|
|
If IsArray(b) Then
|
|
mi_add = CVErr(2018)
|
|
Else
|
|
a = a + b
|
|
mi_add = a
|
|
End If
|
|
End If
|
|
End Function
|
|
|
|
Private Function mi_mul(ByVal a As Variant, b As Variant) As Variant
|
|
If IsArray(a) Then
|
|
If IsArray(b) Then
|
|
If a(2) <> b(2) Then
|
|
mi_mul = CVErr(2019)
|
|
Else
|
|
a(1) = (a(1) * b(1)) Mod a(2)
|
|
mi_mul = a
|
|
End If
|
|
Else
|
|
mi_mul = CVErr(2018)
|
|
End If
|
|
Else
|
|
If IsArray(b) Then
|
|
mi_mul = CVErr(2018)
|
|
Else
|
|
a = a * b
|
|
mi_mul = a
|
|
End If
|
|
End If
|
|
End Function
|
|
|
|
Private Function mi_power(x As Variant, p As Integer) As Variant
|
|
res = mi_one(x)
|
|
For i = 1 To p
|
|
res = mi_mul(res, x)
|
|
Next i
|
|
mi_power = res
|
|
End Function
|
|
|
|
Private Function mi_print(m As Variant) As Variant
|
|
If IsArray(m) Then
|
|
s = "modint(" & m(1) & "," & m(2) & ")"
|
|
Else
|
|
s = CStr(m)
|
|
End If
|
|
mi_print = s
|
|
End Function
|
|
|
|
Private Function f(x As Variant) As Variant
|
|
f = mi_add(mi_power(x, 100), mi_add(x, mi_one(x)))
|
|
End Function
|
|
|
|
Private Sub test(x As Variant)
|
|
Debug.Print "x^100 + x + 1 for x == " & mi_print(x) & " is " & mi_print(f(x))
|
|
End Sub
|
|
Public Sub main()
|
|
test 10
|
|
test [{10,13}]
|
|
End Sub
|