答案:1、用辗转相除法(欧几里德法)求最大公约数
算法描述:
m用n求余为a, 若a不等于0
则 m = n, n = a, 继续求余
否则(即若a为0) n 为最大公约数
2、 最小公倍数 = 两个数的积 / 最大公约数代码如下,请结合算法分析看:
'求最大公约数的函数,参数M、N为两个正整数
Function GY(ByVal M As Integer, ByVal N As Integer) As Integer
Dim T As Integer
If M < N Then '如果M比N小,则将两数对调,为后面M mod N准备T = M
M = N
N = T
End If
T = M Mod N‘以下循环是算法重点:m用n求余为a, 若a不等于0则 m = n, n = a, 继续求余,否则(即若a为0) n 为最大公约数
While T <> 0M = N
N = T
T = M Mod N
Wend
GY = NEnd Function
'求最小公倍数的函数
Function GB(ByVal M As Integer, ByVal N As Integer) As Integer
GB = M * N / GY(M, N)
End Function
'按钮点击事件
Private Sub Command1_Click()
Dim M As Integer, N As Integer
M = Val(InputBox("输入第一个整数:"))
N = Val(InputBox("输入第二个整数:"))
MsgBox "公约数是" & GY(M, N) & ",公倍数是" & GB(M, N)End Sub
根据求最大公约数的公式 :辗转相除法
步骤是:
设有数a, b
1) 求a / b ,得余数r
2) 如果r = 0, 此时的 b 值 即为所求最大公约数。
3) r不为0, 令a = b, b= r , 重复1) 到 3) 直到r=0
用VB语句可表示为:
dim a, b, a1, b1, r, s
a = 125
b = 55 '这里随便找两个数测试
'记录原来的数
a1=a
b1=b
'下面开始算法
r= a mod b ' 第1)步
while r<>0 '第2)步判断
a = b '不为0,第3)步
b = r
r = a mod b
loop
'为0,结束循环,此时b即为所求
debug.print "最大公约数是:" & b
r = b '最大公约数放到r中免得看着混乱
'最小公倍数是:两数相乘再除以最大公约数
s = a1 * b1 / r
debug.print "最小公倍数是:" & s