美文网首页
2.求两个数的最大公约数

2.求两个数的最大公约数

作者: RBNote | 来源:发表于2017-11-02 23:15 被阅读14次

题目:求两个数的最大公约数

方式一:使用辗转相除法求两个数的最大公约数

辗转相除法.png

具体代码如下:
这里有两个问题?
问题1: 为什么while循环用b,不用余数temp
问题2: b 是最大公约数,为什么最后返回的是a;
while循环一直在做一件事,不停的把b赋值给a,不停的把余数temp赋值给b

//  最大公约数(greatest common divisor)
int gcd(int a,int b)
{
    int temp = 0; //中间变量
    if(a<b){ // 保证大数在前,小数在后,永远都是计算:大数%小数的余数
        temp = a;
        a = b;
        b = temp;
    }
    
    while (b!=0) { //  如果余数不为0(应为总是会将余数的值赋值给b,所以这里用b作为判断条件),一直循环;如果余数为0,a就是最大公约数
        temp = a%b; // 计算a%b的余数
        a = b; // 把b赋值给a
        b = temp; // 让余数等于b
    }
    return a; // 循环结束后
}

方式二:辗转相除法求两个数的最大公约数

2.相减法.png

转换为代码:

// 怎么转化为代码
int gcd2(int a, int b)
{
    while (a!=b) {
        if(a>b)
        {
            a=a-b;
        }else{
            b = b-a;
        }
    }
    return a;
}

方式三:穷举法,求两个数的最大公约数

最直接,最好理解,效率最低一种方式
就是一个个的试:取两个数中的较小的数temp,对较小的数进行求余运算,同时temp-- ;直到余数都为0时,结束循环,此时temp就是两个数的最大公约数。


3.穷举法.png
// 穷举法求两个数的最大公约数
int gcd(int a,int b)
{
    int temp=0; // 定义一个中间变量temp
    a>b?(temp = b):(temp =a); // 让temp等于两个数中较小的哪一个数
    
    while (a%temp || b%temp) { // 两个数分别对temp求余数。同时temp--
        temp--;
    }
    return temp;
}

相关文章

  • 最大公约数C++

    求两个数的最大公约数:

  • python 求最大公约数和最小公倍数

    求两个数的最大公约数和最小公倍数 求三个数的最大公约数和最小公倍数

  • 2.求两个数的最大公约数

    题目:求两个数的最大公约数 方式一:使用辗转相除法求两个数的最大公约数 具体代码如下:这里有两个问题?问题1: 为...

  • 最小公倍数

    1.解题思路 可以先用辗转相除法求两个数的最大公约数,而最小公倍数 = 两数之积 / 最大公约数。 2.输入描述 ...

  • 常用的简单函数 ——求最大公约数的函数

    当计算多个数的公约数时,需要知道,前两个的最大公约数,依次和后面的数求公约数,得到的就是所有数字的最大公约数。

  • 实验十:优秀代码

    C : 递归求最大公约数 题目描述写递归函数求两个数的最大公约数优秀代码 D: 编写删除字符串中某个字符的函数--...

  • 最大公约数

    最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 想求两个数找最大公约数是什么?...

  • 【golang】递归求最大公约数

    首先是求两个数最大公约数的数学原理:   辗转相除法, 又名欧几里德算法,是求最大公约数的一种方法。它的具体做法是...

  • 辗转相除法

    求两个数a和b的最大公约数的算法: 1、如果b等于0,计算结束,a就是最大公约数; 2、否则,计算a除以b的余数,...

  • 欧几里得算法

    欧几里得算法:辗转相除法,用来求两个数的最大公约数。【在数学里面最大公约数是没有负的定义的,所以负数是不谈最大公约...

网友评论

      本文标题:2.求两个数的最大公约数

      本文链接:https://www.haomeiwen.com/subject/twoapxtx.html