Dim x As Long
Private Sub Command1_Click()
Dim a As Long, b As Long
a = Val(InputBox("A="))
b = Val(InputBox("B="))
Call gcd(a, b)
Print "用过程计算的"; a; "和"; b; "的最大公约数是:"; x
Print "用函数计算的"; a; "和"; b; "的最大公约数是:"; gcd1(a, b)
End Sub
Private Sub gcd(ByVal a As Long, ByVal b As Long)
Dim r As Long
Do
r = a Mod b
a = b
b = r
Loop Until r = 0
x = a
End Sub
Private Function gcd1(ByVal a As Long, ByVal b As Long) As Long
Dim r As Long
Do
r = a Mod b
a = b
b = r
Loop Until r = 0
gcd1 = a
End Function
设a,b两个数
1,先求最大公约数:
去两个数的模,如果b能除尽a,则是这两个数的最大公约数(如6和3的最大公约数是3),否则,调用GCD(a,b)=GCD(b,a mod b)例如,求58和8的最大公约数:
GCD(58,8)=GCD(8, 58 mod 8)=GCD(8,2)=2
2,最小公倍数为:
第一个数 第二个数 / 两数的最大公约数
'这个嘛,用我国古代数学家的“更相减损之术”就行。
Private
Sub
Command1_Click()
Dim
a,
b
As
Integer
a
=
Val(Text1Text)
b
=
Val(Text2Text)
Do
While
a<>b
If
a>b
Then
a=a-b Else
b=b-a
Loop
Text3Text=a
End
If
End
Sub
'此算法的原理就是大数减小数,直到产生一对相等的数,这个数就是最大公约数。
'如果照着你那种方式(应该是欧里几得算法吧),可以这样改:
Private
Sub
Command1_Click()
Dim
a,
b,
r
As
Integer
If
Val(Text1Text)
>
Val(Text2Text)
Then
a
=
Val(Text1Text)
b
=
Val(Text2Text)
Else
b
=
Val(Text1Text)
a
=
Val(Text2Text)
End
If
Do
r
=
a
Mod
b
a
=
b
b
=
r
Loop
Until
r
=
0
Text3Text
=
a
End
Sub
Private Sub Form_Click()
Dim N As Integer, M As Integer, G As Integer
N = InputBox("输入 N ")
M = InputBox("输入 M ")
G = Gcd(N, M)
Print N; " 和 "; M; " 的最大公约数是:"; G
End Sub
Private Function Gcd(ByVal A As Integer, ByVal B As Integer)
Dim R As Integer
R = A Mod B
Do While R <> 0
A = B
B = R
R = A Mod B
Loop
Gcd = B
End Function
以上就是关于vb分别用子过程和子函数编写求两个数的最大公约数(算法用辗转相减法)全部的内容,包括:vb分别用子过程和子函数编写求两个数的最大公约数(算法用辗转相减法)、利用vb教程来做一个求最小公倍数最大公约数、vb求最大公约数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)