1. 程式人生 > >【C++解題報告】求最大公約數問題(輾轉相除法)

【C++解題報告】求最大公約數問題(輾轉相除法)

題目來源:

    基礎班《函式、遞推、遞迴》,遞迴第5題。 描述: 總時間限制:1000ms  記憶體限制:65536KB      給定兩個正整數,求它們的最大公約數。 輸入: 輸入一行,包含兩個正整數(<1,000,000,000)。 輸出: 輸出一個正整數,即這兩個正整數的最大公約數。
樣例輸入:
6 9

樣例輸出:

3
提示:
求最大公約數可以使用輾轉相除法:
假設a > b > 0,那麼a和b的最大公約數等於b和a%b的最大公約數,然後把b和a%b作為新一輪的輸入。
由於這個過程會一直遞減,直到a%b等於0的時候,b的值就是所要求的最大公約數。
比如:
9和6的最大公約數等於6和9%6=3的最大公約數。
由於6%3==0,所以最大公約數為3。
題目思路:
由題目的提示的,利用輾轉相除法求最大公約數。輾轉相除法:求a和b最大公約數,將a/b,如果a能整除b(a%b!=0),那麼b就是a的最大公約數。如果不等於0,將b作為新的被除數,a/b的餘數(a%b)作為新的除數。一直迴圈下去。這裡定義一個函式gcd(Greatest common divisor),並進行遞迴呼叫。
      例如求24 和18的最大公約數: 


程式碼:

using namespace std;

int gcd(int a,int b)       //定義函式gcd 計算 
{
	if(a%b==0)  
        return b;          // 如果a能整除b 則b為最大公約數 
    else                   
        return gcd(b,a%b); //如果不能整除,則將b作為新的被除數,a作為新的除數,    
} 

int main()                 //定義主函式 
{
	int a,b;               //定義變數 a,b 
	cin>>a>>b;             //輸入 
	cout<<gcd(a,b);        //輸出a,b的最大公約數 
	return 0;
}