最大公约数算法GCD

来源:互联网 发布:不出门便知天下事言语 编辑:程序博客网 时间:2024/05/18 15:06
欧几里德定理

若 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;}



1 0