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

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

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

#include<iostream>
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<iostream>
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;
}
  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值