C++求两个数的最大公约数

C++求两个数的最大公约数

方法一:可以想到两个数的最大公约数可能是两个数的min,最小可能是1。所以,可以设最大公约数从min开始进行判断,如果gcd大于1并且不能同时整除m和n,那么就gcd-1,重复判断是否整除。

#include
using namespace std;
int main(){
    int m,n,gcd;
    cin>>m>>n;
    gcd=m>n?n:m;
    while (gcd>1&&(m%gcd!=0||n%gcd!=0))
    {
        gcd--;
    }
    cout<<gcd<<endl;
    return 0;
}

方法二:欧几里德算法,对于任意两个自然数m和n,用m,n,r分别表示被除数,除数,余数,m和n的最大公约数等于n和r的最大公约数,以下是辗转相除法

  1. 求m除以n的余数r
  2. 当r!=0时,执行第3步;若r==0,则n为最大公约数,算法结束
  3. 将n的值赋值给m,r的值赋值给n,再求m除以n的余数r
  4. 转到第2步
#include
using namespace std;
int main(){
    int m,n;
    cin>>m>>n;
    int r=m%n;
    while(r!=0){
        m=n;
        n=r;
        r=m%n;
    }
    cout<<"gcd="<<n<<endl;
    return 0;
}

你可能感兴趣的:(C++学习,c++,算法,开发语言)