• 最大公约数&最小公倍数


    最大公约数 

     链接

    如果有一个自然数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_孟】!

  • 相关阅读:
    How to create jar for Android Library Project
    Very large tabs in eclipse panes on Ubuntu
    64bit Ubuntu, Android AAPT, R.java
    Linux(Ubuntu)下如何安装JDK
    Configure xterm Fonts and Colors for Your Eyeball
    建立、配置和使用Activity——启动其他Activity并返回结果
    建立、配置和使用Activity——使用Bundle在Activity之间交换数据
    建立、配置和使用Activity——启动、关闭Activity
    建立、配置和使用Activity——Activity
    异步任务(AsyncTask)
  • 原文地址:https://www.cnblogs.com/mq0036/p/14891940.html
Copyright © 2020-2023  润新知