|

楼主 |
发表于 2019-12-15 20:40
|
显示全部楼层
求大数的乘法逆元的主程序代码,只发主程序:
Private Sub Command1_Click()
Dim n, p, a, b, c, d, r
n = Trim(Text1.Text)
p = Trim(Text2.Text)
a = 1
b = 0
c = 0
d = 1
If Len(n) < 10 And Len(p) < 10 Then
If Val(n) > Val(p) Then
m = n
q = p
s1 = 1
Else
m = p
q = n
s1 = 0
End If
Do Until Val(m) Mod Val(q) = 0
s = m \ q
r = m Mod q
s1 = s1 + 1
If s1 Mod 2 = 1 Then
a = a
b = a * s + b
c = c
d = c * s + d
Else
b = b
a = a + b * s
d = d
c = c + d * s
End If
m = q
q = r
Loop
If Val(a + b * m) = p Then
b = b
a = a + b * (m - 1)
d = d
c = c + d * (m - 1)
Else
If Val(b + a * m) = p Then
a = a
b = b + a * m
c = c
d = d + c * m
Else
b = b
a = a + b * (m - 1)
d = d
c = c + d * (m - 1)
End If
End If
X = (a + b) Mod p
Y = (c + d) Mod n
Else
If MBJC(Trim(n), Trim(p)) >= 1 Then
m = n
q = p
s1 = 1
Else
m = p
q = n
s1 = 0
End If
Do Until zhengchuqyushu(MCC1(Trim(m), Trim(q))) = 0
s = zhengchuqy(MCC1(Trim(m), Trim(q)))
r = zhengchuqyushu(MCC1(Trim(m), Trim(q)))
s1 = s1 + 1
If s1 Mod 2 = 1 Then
a = a
b = MPC1(MbC(Trim(a), Trim(s)), Trim(b))
c = c
d = MPC1(MbC(Trim(c), Trim(s)), Trim(d))
Else
b = b
a = MPC1(Trim(a), MbC(Trim(b), Trim(s)))
d = d
c = MPC1(Trim(c), MbC(Trim(d), Trim(s)))
End If
m = q
q = r
Loop
If MPC1(Trim(a), MbC(Trim(b), Trim(m))) = p Then
b = b
a = MPC1(Trim(a), MbC(Trim(b), MPC(Trim(m), 1)))
d = d
c = MPC1(Trim(c), MbC(Trim(d), MPC(Trim(m), 1)))
Else
If MPC1(Trim(b), MbC(Trim(a), Trim(m))) = p Then
a = a
b = MPC1(Trim(b), MbC(Trim(a), Trim(m)))
c = c
d = MPC1(Trim(d), MbC(Trim(c), Trim(m)))
Else
b = b
a = MPC1(Trim(a), MbC(Trim(b), MPC(Trim(m), 1)))
d = d
c = MPC1(Trim(c), MbC(Trim(d), MPC(Trim(m), 1)))
End If
End If
Do While Left(a, 1) = "0"
a = Mid(a, 2)
Loop
If Len(a) = 0 Then
a = 0
Else
a = a
End If
End If
Text3 = n & "模" & p & " 的逆元为:" & a
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub |
|