程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 基於歐幾裡德算法的使用

基於歐幾裡德算法的使用

編輯:C語言基礎知識

歐幾裡德算法稱為輾轉相除法,用來求已知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;
 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved