zoukankan      html  css  js  c++  java
  • 最大公约数&最小公倍数

    最大公约数 

     链接

    如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数

    整除

    若整数b除以非零整数a,商为整数,且余数 为零, 我们就说b能被a整除(或说a能整除b),b为被除数,a为除数,即a|b(“|”是整除符号),读作“a整除b”或“b能被a整除”。a叫做b的约数(或因数),b叫做a的倍数 

    辗转相除法

    又叫【欧几里德算法】

    用较大的数除以较小的数,上面较小的除数和得出的余数构成新的一对数,继续做上面的除法,直到出现能够整除的两个数,其中较小的数(即除数)就是最大公约数

    代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /*
    欧几里德算法:辗转求余
    原理: gcd(a,b)=gcd(b,a mod b)
    当b为0时,两数的最大公约数即为a
    getchar()会接受前一个scanf的回车符
    */
    #include<stdio.h>
    unsigned int Gcd(unsigned int M,unsigned int N)
    {
        unsigned int Rem;
        while(N > 0)
        {
            Rem = M % N;
            M = N;
            N = Rem;
        }
        return M;
    }
    int main(void)
    {
        int a,b;
        scanf("%d %d",&a,&b);
        printf("the greatest common factor of %d and %d is ",a,b);
        printf("%d ",Gcd(a,b));
        return 0;
    }

    最简代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 辗转相除法<br>#include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int a = 211, b = 1350;
        return gcd(b,a);
    }
    int gcd(int x,int y)
     
    {
           return y>0?gcd(y,x%y):x;
    }  

    最小公倍数

    链接

    两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

    计算方法

    分解质因数法

    先把这几个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积(如果有几个质因数相同,则比较两数中哪个数有该质因数的个数较多,乘较多的次数)

    例如: 45=3*3*5
        30=2*3*5
        不同的质因数是2。5,3是他们两者都有的质因数,由于45有两个3,30只有一个3,所以计算最小公倍数的时候乘两个3.
        最小公倍数等于2*3*3*5=90

    公式法

    由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)×[a,b]=a×b。所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。

    例如:  求[18,20],即得[18,20]=18×20÷(18,20)=18×20÷2=180。

    求几个自然数的最小公倍数,可以先求出其中两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,依次求下去,直到最后一个为止。最后所得的那个最小公倍数,就是所求的几个数的最小公倍数。 

    代码 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include<stdio.h>
     
    int gcd(int a,int b);
    int lcm(int a,int b);
    int main(void)
    {
        int m,n,result_gcd,result_lcm;
     
        printf("求两个数的最大公约数及最小公倍数? 请输入你想计算的两个数: ");
        scanf("%d%d",&m,&n);
        result_gcd=gcd(m,n);
        result_lcm=lcm(m,n);
        printf("最大公约数为:%d 最小公倍数为:%d ",result_gcd,result_lcm);
     
        return 0;
    }
     
    int gcd(int a,int b)
    {
        int temp;
        if(a<b)
        {
    //交换两个数,使大数放在a上
            temp=a;
            a=b;
            b=temp;
        }
        while(b!=0)
        {
    //利用辗除法,直到b为0为止
            temp=a%b;
            a=b;
            b=temp;
        }
        return a;
    }
     
    int lcm(int a,int b)
    {
        int temp_lcm;
        temp_lcm=a*b/gcd(a,b);//最小公倍数等于两数之积除以其最大公约数
        return temp_lcm;
    }

      

     

    出处:https://www.cnblogs.com/pam-sh/p/12599576.html

    您的资助是我最大的动力!
    金额随意,欢迎来赏!
    款后有任何问题请给我留言。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

    如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,求打             付款后有任何问题请给我留言!!!

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【Jack_孟】!

  • 相关阅读:
    一个简单实现的遮罩层
    文字内容过长是自动出现省略号
    Maven入门学习(下)
    Maven入门学习(上)
    使用ODP.NET查询数据参数顺序问题及莫名ORA-01722错误提示
    Xamarin开发Android笔记:TextView行间距设定
    Xamarin开发Android笔记:图片切换ImageSwitcher
    Xamarin开发Android笔记:背景操作
    UI创意求助:手机贪吃蛇游戏方向控制键设计
    做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)
  • 原文地址:https://www.cnblogs.com/mq0036/p/14891940.html
Copyright © 2011-2022 走看看