• 最大公因数(欧几里得算法)


        设两数为a、b(a>b),求a和b最大公因数(a,b)的步骤如下:

        用a除以b,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。其最后一个为被除数的余数的除数即为(a, b)。
        例如:a=25,b=15,a/b=1......10,b/10=1......5,10/5=2.......0,最后一个为被除数余数的除数就是5,5就是所求最大公因数。

    C++程序:

    #include<iostream>
    using namespace std;

    int gcd(int a,int b) //欧几里得算法即展转相除法
    {
        int t=a%b;
        while(t!=0) //可用装逼写法while(t)
        {
            a=b;
            b=t;
            t=a%b;
        }

        return b;

    }


    int main()
    {
        freopen("p.in","r",stdin);
        freopen("p.out","w",stdout); //文件的输入与输出
        int a,b;
        cin>>a>>b;
        cout<<gcd(a,b)<<endl; //直接调用函数

    return 0;
    }

    以上为普通做法,下面采用装逼做法,把gcd函数变成递归,程序如下:

    #include<iostream>
    using namespace std;

    int gcd(int a,int b)
    {

        return (b==0)?a:gcd(b,a%b);    //一条语句搞定(三元运算符)装逼,跟上面略有不同,上面做到t=0,这里做到b=0

    }


    int main()
    {
    freopen("p.in","r",stdin);
    freopen("p.out","w",stdout);  //采用文件调用,习惯且方便
    int a,b;
    cin>>a>>b;
    cout<<gcd(a,b)<<endl;


    return 0;
    }

    备注与说明:

    “ ? : ”是一个三元运算符,其构成的表达式格式为:
          <表达式1> ? <表达式2> : <表达式3>

    例如:
        if (a>b) max=a;
        else     max=b;
    可写成:
        max=a>b?a:b;

  • 相关阅读:
    Python常用模块学习
    如何在cmd下切换不同版本的Python
    Python3
    Python第二模块(文件和函数)
    Hibernate教程一览
    struts2框架一览
    Java正式day_04——嵌套循环
    AJAX
    JS+JQUERY
    Mybatis注意问题
  • 原文地址:https://www.cnblogs.com/jjzzx/p/5062691.html
Copyright © 2020-2023  润新知