輾轉相除法
- 作用:
- 可以用來求最大公約數
- 可以求兩數的最小公倍數
- 原理:若a除以b的余數為r,則有(a,b)=(b,r),遞歸后,b就是他的最大公約數。
- 算法演示:
方法一:
int gcd(int m,int n)
{
int t = 1;
while(t != 0)
{
t=m%n;
m=n;
n=t;
}
return m;
}
方法二:
int gcd(int m,int n)
{
int t = 1;
while(m%n != 0)
{
t=m%n;
m=n;
n=t;
}
return n;
}
//這個時候返回的是n,為什么呢?
//因為while的原因,當m%n等於0時,直接跳出循環了,沒有m,n的轉換了,這點困擾我好久。。。
方法三:遞歸
#include <iostream>
#include <conio.h>
using namespace std;
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
cout << gcd(169, 48) << endl;
_getch();
return 0;
}