VB 求公因数 一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 12:20:53
Private Sub Command1_Click()
num1 = InputBox("请输入一个正整数")
num2 = InputBox("请输入一个正整数")

If num1 < num2 Then
temp = num1 '当num1小于num2时通过temp中间变量对num1和num2值进行交换,以便下面的运算
num1 = num2
num2 = temp
End If
a = num1
b = num2

While b <> 0
temp = a Mod b
a = b

b = temp
Wend
Print "最大公因数为:"; a
Print "最小公倍数为:"; num1 * num2 / a
End Sub

以上是正确的求法
While b <> 0
temp = a Mod b
a = b

b = temp
Wend
这一段是什么意思?其他的我都懂

这是求公因数的算法
先a对b求模
然后把b的值给a,把所求得的模的值给b
再a对b求模
再交换...
如此循环下去,直到a mod b的值为0.此时b的值就是他们的公因数
上面由于把b的值给a了所以Print "最大公因数为:"; a

叫展转法相除,如24和16的话你使用这段代码可以得到一个最大公因数8。

第一次,a做被除数,b做除数,temp是a除b的余数

求完以后,让除数变成被除数就是a=b,然后是余数做除数,b=temp

这次一直除,直到被余数为0,这个时侯除数就是最大公约数

就比如36,24

a=36,b=24

第一次 b<>0进入循环
temp=36 mod 24=12;
a=b=24;
b=temp=12;
第二次 b<>0 再循环
temp=24 mod 12=0
a=b=12;
b=temp=0;
这样就跳出循环

所以最大公约数就是12

其实 这个while条件可以改成while temp<>0这样会更有可读性,可比较让人理解