参考文献:1. http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html

                   2 . https://www.cnblogs.com/hadilo/p/5914302.html

一、欧几里得算法(重点是证明,对后续知识有用)

  欧几里得算法,也叫辗转相除,简称 gcd,用于计算两个整数的最大公约数

  定义 gcd(a,b) 为整数 a 与 b 的最大公约数

  引理:gcd(a,b)=gcd(b,a%b)

  证明:

    设 r=a%b , c=gcd(a,b)

    则 a=xc , b=yc , 其中x , y互质

    r=a%b=a-pb=xc-pyc=(x-py)c

    而b=yc

    可知:y 与 x-py 互质

    证明:

                假设 y 与 x-py 不互质

                设 y=nk , x-py=mk , 且 k>1 (因为互质)

                将 y 带入可得

                x-pnk=mk

                x=(pn+m)k

                则 a=xc=(pn+m)kc , b=yc=nkc

                那么此时 a 与 b 的最大公约数为 kc 不为 k

                与原命题矛盾,则 y 与 x-py 互质

    因为 y 与 x-py 互质,所以 r 与 b 的最大公约数为 c

    即 gcd(b,r)=c=gcd(a,b)

    得证

  当a%b=0时,gcd(a,b)=b

 递归算法:

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

相关文章:

  • 2021-07-06
  • 2022-12-23
  • 2021-09-18
猜你喜欢
  • 2021-08-26
  • 2022-02-04
  • 2022-12-23
  • 2021-10-09
  • 2022-02-22
  • 2022-12-23
相关资源
相似解决方案