最大公约数(辗转相除法和更相减损法)

来源:互联网 发布:北京方便面的危害知乎 编辑:程序博客网 时间:2024/05/17 07:47

辗转相除法的a%b运算性能较低

更相减损法,当两数相差很大时运算量也会加大


#include <iostream>using namespace std;int gcd(int a,int b)//辗转相除法{    if(a<b)    {        int temp=a;        a=b;        b=temp;    }    int c;    while(b)    {        c=a%b;        a=b;        b=c;    }    return a;}int gcd1(int a,int b)//更相减损法{    if(a==b) return a;    else if(a>b) return gcd1(a-b,b);    else return gcd1(b-a,a);}int gcd2(int a,int b)//从最大的数依次遍历(计算量很大)不安全{    if(a>b){        for(int i=b;i>=2;i--)        {            if(a%i==0&&b%i==0)                return i;        }    }    else        for(int i=a;i>=2;i--)        {            if(a%i==0&&b%i==0)                return i;        }}int main(){    int num1,num2;    cin>>num1>>num2;    cout<<gcd(num1,num2)<<endl;    cout<<gcd1(num1,num2)<<endl;    cout<<gcd2(num1,num2)<<endl;    return 0;}


0 0