|  | 
 
 
 楼主|
发表于 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
 | 
 |