1. 程式人生 > >求最大公約數演算法(3中方法)

求最大公約數演算法(3中方法)

最大公約數定義:兩個不全為0的非負整數m和n的最大公約數記為gcd(m,n),代表能夠整除(即餘數為0)m和n的最大正整數。

 一、歐幾里得演算法

第一步:如果n=0,返回m的值作為結果,同時過程結束;否則進入第二步

第二步:m除以n,將餘數賦給r

第三步:將n的值賦給m,將r的值賦給n,返回第一步

演算法 Euclid(m,n)

        //使用歐幾里德演算法計算gcd(m,n)

       //輸入:兩個不全為0的非負整數m,n

      //輸出:m,n的最大公約數

      if n=0

        return n

     while n!=0 do

        r←m mod n

       m←n

       n← r

    return n

二、連續整數檢測法
第一步:將min{m,n}的值賦給t
第二步:m除以t,如果餘數為0,進入第三步;否則進入第四步
第三步:n除以t,如果餘數為0,返回t的值作為結果;否則進入第四步
第四步:把t的值減1。返回第二步
演算法:
 //使用連續整數檢測法計算gcd(m,n)
 //輸入:兩個不全為0的非負整數m,n
 //輸出:m,n的最大公約數
        if n=0 return n
        t=min{m,n}
       while t>0 do
                if (m mod t)==0
                     if (n mod t)==0
                        return t
                     else t=t-1
              else t=t-1
        return t

三、中學中計算gcd(m,n)的過程

第一步:找到m的所有質因數

第二步:找到n的所有質因數

第三步:從第一步和第二步求得的質因數分解式中找出所有的公因數(如果p是一個公因數,而且在m和n的質因數分解式分別出現過pmpn次,那麼應該將p重複min{pm,pn})

第四步:將第三步中找到的質因數相乘,其結果作為給定數字的最大公約數