求最大公约数

                                                         求最大公约数

                     很多时候我们都需要使用这个进行解决问题, 所以认为写一个和最大公约数有关的东西是必要的!

                    思想:

                             采用辗转相除法:

                            关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下: 


约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。” 


其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。 


辗转相除法求最大公约数,是一种比较好的方法,比较快。 

          其实很简单 ,就是一个数对另一个数求余,然后把余数作为除数, 原除数作为被除数, 直至 余数为0  那么除数就是 最大公约数 ( 要判断除数为 0 ) 的情况就是!

          不多说了 ,直接上代码:

 源代码:

#include<cstdio>
#include<iostream>
using namespace std;

int oulid(int a, int b)
{
    int t;
    if(b == 0)
    {
        return a;
    }
    t = a%b;
    while(t  != 0)
    {
        a = b;
        b = t;
        t = a%b;
    }
    return b;
}
int main()
{
    int a, b, c;
    cout<<"Input two integers"<<endl;
    while(cin>>a>>b)
    {
         c = oulid(a, b);
         cout<<c<<endl;
    }
    return 0;

}


下面给出求最大公约数的递归和飞抵会代码,并且给出 注释:

#include<iostream>
using namespace std;

int oulid(int a, int b)
{
    //求最大公约数
    if(b == 0)
    {
        return a;
    }
    int res = a%b ;  //表示余数 6 4  余数 2  er 4 7 res 4
    while(res)
    {
        a = b;     // a= 4   2   er  7 4 3
        b = res;   //b = 2   2  er 4   3 1 就是最大公约数
        res = a%b; //res = 2  0  er 3  1 0
    }
    return b;
}
int gcd(int a, int b)
{
    if(b == 0) return a;
    return gcd(b , a%b);
}
int main()
{
    int a, b;
    while(cin>>a>>b)
    {
        int ans1 = oulid(a, b);
        int ans2 = gcd(a, b);
        cout<<ans1<<" "<<ans2<<endl;
    }
    return 0;
}



wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值