• 最大公因数数gcd模板


      首先蒟蒻是在大佬的博客里学习的代码,代码风格多有相似之处,大佬博客https://www.cnblogs.com/lMonster81/p/10433902.html

    最大公因数那,顾名思义就是两个数共有的因数里最大的那个,辗转相除求最大公因数所用的原理就是两个数的最大公因数等于这两个数中【较小的那个数】和【两数之差】的最大公因数,证明如下:

      

     描述:关于辗转相除法的具体实现在这里就不具体说明了,本文要记录的是辗转相除法应用于求最大公约数的算法证明过程。
    
      假设:
    
    求m和n的最大公约数。
    a,b分别是m除以n的商和余数,即m=na+b。
    gcd(m,n)表示m和n的最大公约数。
      求证:gcd(m,n)=gcd(n,b)
    
      证明:
    
        设c=gcd(m,n), d=gcd(n,b)
    
      1. ∵c为m和n的公约数
    
        ∴m能被c整除,n也能被c整除
    
        ∴na也能被c整除  参照推论一
    
        ∴m-na也能被c整除(即b能c整除)  参照推论二
    
        ∴c为n和b的公约数
    
        ∵d为n和b的最大公约数
    
        ∴c≤d
    
      2. 同理可证 d≤c
    
        ∵d为n和b的公约数
    
        ∴n能被d整除,b也能被d整除
    
        ∴na也能被d整除  参照推论一
    
        ∴na+b也能被d整除(即m能d整除)  参照推论二
    
        ∴d为m和n的公约数
    
        ∵c为m和n的最大公约数
    
        ∴d≤c
    
      综上所述:c=d,即gcd(m,n)=gcd(n,r)
    
     
    
            推论一:若a能被b整除(a=tb),则如果k为正整数,则ka也能被b整除(ka=ktb)。
    
            推论二:若a能被c整除,b也能被c整除,则(a±b)也能被c整除。
    

      以上证明转载自:https://www.cnblogs.com/zwffff/archive/2010/08/25/1808178.html

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    int a,b;
    int gcd(int x,int y)
    {
        int Max=max(x,y),Min=min(x,y);
        return Max%Min==0?Min:gcd(Max,Max%Min);
    }
    int main()
    {
        cin>>a>>b;
        int c=gcd(a,b);
        cout<<c;
        return 0;
    } 

     关于最大公因数与最小公倍数的其他几个知识:

      1,:最大公因数与最小公倍数的乘积等于原两个数的乘积。

  • 相关阅读:
    关于给Tomcat设置maxPostSize的问题
    完美激活PyCharm教程
    Tomcat +Nginx+Redis实现session共享
    python 上传多文件
    吸引注意力的动画
    Create React App 安装less 报错
    2020软件工程作业01
    yum用法
    rpm包的管理
    共享依赖库的误移或误删解决办法
  • 原文地址:https://www.cnblogs.com/yuelian/p/11198426.html
Copyright © 2020-2023  润新知