zoukankan      html  css  js  c++  java
  • C++丨常见的四种求最大公约数方法!赶紧收藏!

    为了更好的了解算法的概念,今天会分享一些C++求最大公约数几种常见的算法。


     

    第一种:穷举法之一

    穷举法,也叫枚举法,求最大公约数时从两者中较小的数开始,由大到小列举,直到找到第一个公约数为止。

    解释:拿其中一个数出来,用一个临时变量(tem)保存,每次都把那两个数除以这个临时变量。如果能除断,直接返回tem;如果不能除断,tem- -,直到都能除断,再返回tem。tem就是它们的最大公约数。

    #include <iostream>

    using namespace std;

    int CommFactor1(int m, int n); //函数的声明

    int main()

    {

    int a, b;

    cin >> a >> b;

    cout << "这两个数的最大公约数为:" << CommFactor1(a,b)<< endl;

    return 0;

    }

    int CommFactor1(int m,int n)

    {

    int tem;

    for (tem = m;; tem--)

    {

    if (m % tem == 0 && n % tem == 0)

    {

      break;

    }

    }

    return tem;

    }

    第二种:穷举法之二

    解释:求出两数的所有公因子,再把公因子累乘得到最大公约数。

    #include <iostream>

    using namespace std;

    int CommFactor2(int m, int n); //函数的声明

    int main()

    {

      int a, b;

      cin >> a >> b;

      cout << "这两个数的最大公约数为:" << CommFactor2(a,b)<< endl;

      return 0;

    }

    int CommFactor2(int m,int n)

    {

      int i;

      int factor = 1;

      for (i=2;i<=m&&i<<n;i++)

      {

        while(m % i == 0 && n % i == 0)  //这里不能用if语句,因为可能会有重复的公因子

        {

          factor = factor * i;

          m = m / i;

          n = n / i;

        }

      }

      return factor;

    }

    第三种:辗转相除法

    辗转相除法,又称欧几里得算法。用于计算两个正整数a,b的最大公约数和最小公倍数,其依赖于gcd(a,b) = a (b=0)和gcd(b,a mod b) (b!=0).

    解释:将两个数辗转相除直到余数为0。

    #include <iostream>

    using namespace std;

    int CommFactor3(int m, int n); //函数的声明

    int main()

    {

    int a, b;

    cin >> a >> b;

    cout << "这两个数的最大公约数为:" << CommFactor2(a,b)<< endl;

    return 0;

    }

    int CommFactor3(int m,int n)

    {

    int z = n;

    while (m % n != 0)

    {

    z = m % n;

    m = n;

    n = z;

    }

    return z;

    }

    第四种:辗转相减法

    辗转相减法,若两个正整数都为偶数,则用2约简,直到不能约简为止。然后用大数减小数,将差与较小的数比较,再以大数减小数,直到减数和差相等为止。

    解释:将两个数辗转相减直到两数相等。

    #include <iostream>

    using namespace std;

    int CommFactor4(int m, int n); //函数的声明

    int main()

    {

    int a, b;

    cin >> a >> b;

    cout << "这两个数的最大公约数为:" << CommFactor4(a,b)<< endl;

    return 0;

    }

    int CommFactor4(int m,int n)

    {

    while (m != n)

    {

    if (m > n)

    {

    m = m - n;

    }

    else

    {

    n = n - m;

    }

    }

    return m;

    }

    以上就是关于对C++求最大公约数四种方法解析的详细介绍,希望对大家的学习有所帮助。


     

    如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!
    C语言C++学习企鹅圈子】,分享(源码、项目实战视频、项目笔记,基础入门教程)
    欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

    编程学习书籍:


     

    编程学习视频:


     
  • 相关阅读:
    由asp的一个错误,看语言的不同:asp & java
    chrome 显示图片遇到的问题,与 淘宝图片服务器 缓存 有关系
    asp 调用 vb(activex dll) ,参数传递(传引用)需要注意
    asp <----> vb(com,dll) <---> c 来回的调用,生命在于折腾
    HTTP/1.1 100 Continue
    java 线程栈 & java.lang.StackOverflowError
    硬盘分区的意义
    硬盘性能 & 文件碎片的一些思考
    Java并发——ReentrantLock类源码阅读
    使用Windows的NAT功能
  • 原文地址:https://www.cnblogs.com/mu-ge/p/14211916.html
Copyright © 2011-2022 走看看