基於歐幾裡德演算法的使用

來源:互聯網
上載者:User

歐幾裡德演算法稱為輾轉相除法,用來求已知m、n兩個自然數的公因數。結合程式說明一下輾轉相除的具體情況。

首先看遞迴實現:

複製代碼 代碼如下:int getcd(int m,int n)
{
if (m < 0 || n <0) {
return 0;
}
if(m < n)
{
int t = m;
m = n;
n = t;
}
if(m % n)
{
return getcd(n,(m % n));
}
else
{
return n;
}
}

主要計算過程分為三個步驟:

1、對輸入的兩個自然數m > n取餘數r,使得0<= r < n

2、如果r為0,n即為所求結果,直接返回

3、r不為0,則賦值m=n,n=r從步驟1開始重新執行

  兩自然數的公因數的定義說明了計算結果產生的條件。如果步驟1中計算出的餘數r = 0,則較小的數為公因數。如果r!=0則自然數m、n的關係可表示為:m = kn + r(其中k為自然數),等式可以證明能整除m的任何數必定能整除n和r;等式進一步可變形為:r = m - kn,說明同時整除m、n的任何數也必定能整除r。也就是說,能整除m、n的數的集合與整除n、r的數的集合相等。所以輾轉相除的方法成立。

再發布一個迴圈實現歐幾裡德演算法的版本。

複製代碼 代碼如下:int getcd2(int m,int n)
{
if (m < 0 || n <0) {
return 0;
}
if(m<n)
{
int t=m;
m=n;
n=t;
}
int cd = 1;
while(1){
int r = m % n;
if(0==r)
{
cd = n;
break;
}
else {
m=n;
n=r;
}
}
return cd;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.