最大公约数和最小公倍数

a    b     的公约数=    b    a%b的公约数                               a大于b,否则交换

证明:

a=kb+r      即  a/b=k     a%b=r

设a  b的公约数(任意性)为d

b为d的倍数,a为d的倍数,  kb自然也是d的倍数

r=a-kb当然也是d的倍数

d为b和r的约数,即d为b和a%b的约数

由于这里d的任意性,可以推出,任意的a  b的公约数,都是b和a%b的公约数

公约数全部相同

 

用递归表示的话,gcd函数用于求最大公约数

gcd(a,b)=gcd(b,a%b);

递归的边界情况为,gcd(a,0)

即其中一个为0的时候,公约数为另一个数

0和任意一个整数x的最大公约数为x

    int gcd(int a,int b)
    {
        if(b==0)return a;
        else return gcd(b,a%b);
    }

 

最小公倍数

设a=kd    b=jd   d为最大公约数

最小公倍数就是jkd=a*b/d

为了避免a*b结果溢出

应该写成(a/d)*b

posted @ 2020-03-15 15:40  ecnu_lxz  阅读(184)  评论(0编辑  收藏  举报