vb分别用子过程和子函数编写求两个数的最大公约数(算法用辗转相减法)

vb分别用子过程和子函数编写求两个数的最大公约数(算法用辗转相减法),第1张

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求最大公约数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9305707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存