輾轉相除法(求最大公約數或最小公倍數)


輾轉相除法

  • 作用:
    • 可以用來求最大公約數
    • 可以求兩數的最小公倍數
  • 原理:若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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM