最大公約數算法GCD

歐幾里德定理

若 a=b×r+q 則gcd(a, b) = gcd(b, q).

GCD的兩種實現方法,效率相近,但數據太大遞歸實現會出現崩潰。

時間複雜度O(logn)

#include<iostream>
using namespace std;
int gcd1(int a,int b)  //遞歸實現
{
    return a==0?b:gcd1(b%a,a);
}
int gcd2(int a,int b)   //迭代實現
{
  int c = a%b;
    while(c)
    {
        a=b;
        b=c;
        c=a%b;
    }
  return b;
}
int main()
{
    int n,m;
    while(cin>>m>>n)
    {
        if(n<=0||m<=0)
            break;
        cout<<gcd1(n,m)<<endl;
        cout<<gcd2(n,m)<<endl;
    }
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章