求任意两个整数的最大公因数

本文介绍如何使用欧几里得算法通过递归和非递归方法编写程序来求解任意两个整数的最大公因数,并提供了一个具体的C++程序实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照欧几里得算法,编写程序,求用户从键盘输入的任意两个整数的最大公因数。

程序的运行结果如下所示:
输入:
120 80
输出:

40

分析:根据欧几里得算法

gcd(a,b)=gcd(b,a%b)证明

不妨假设 a>b

则a=k*b+r①

因为gcd是a、b的最大公约数,所以可以设a=gcd(a,b)*m②,b=gcd(a,b)*n③

联立上面的三个式子得gcd(a,b)*m=k*gcd(a,b)*n+r,整理得r=k*gcd(a,b)*n-gcd(a,b)*m,提取公因式得r=gcd(a,b)(n*k+m)

又因为r=a-k*b=a%b,所以gcd(a,b)=gcd(a,a%b)=gcd(b,a%b)

因此程序实现的依据就是

gcd(a1,b1)=gcd(b1,a1%b1)=gcd(a2,b2)=................=gcd(an-1,bn-1)=bn-1  (an-1%bn-1=0时) [或=gcd(an,bn)=an   (bn=0时)]

所以我们就可以用两种方法,递归和非递归两种做法来解决这个问题


#include<iostream>
using namespace std;
int gcd(int m, int n)    //递归算法
{
    if (n==0)   return m;
    return (gcd(n,m%n));
}
 
int  gcd2(int m, int n)    //递推算法
{
    while (n>0)
    {
        int tem=n;
        n=m%n;
        m=tem;
    }
    return m;
}
int main()
{
    int a,b,ans,tem;
    cin>>a>>b;
    if (a<b)
    {
        tem=a;
        a=b;
        b=tem;  
    }
    ans=gcd2(a,b);
    cout<<ans;
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值