|
楼主 |
发表于 2020-3-28 14:30
|
显示全部楼层
再重发一下,这个程序很重要,不仅可以用来解一次方程和中国剩余定理,还可以用来破解RSA密码。
求乘法的逆元的程序代码,利用陆元鸿教授的矩阵变换法做的,计算小于10位的两个数的逆元,n模p的逆元。
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 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
Text3 = n & "模" & p & " 的逆元为:" & a
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
大数的乘法逆元的程序也出来了,如:67模147573952589676412927 的逆元为:145371356282367809749。由于代码太长,需要可调用程序如大数的乘法除法加法减法等,不发了,下面给出主程序。 |
|