• 欧几里德算法与扩展的欧几里德算法


    欧几里德算法:
               给定的两个整数m,n,求它们的最大公因子。

                算法很简单,使用碾转相除法

    描述:
           E1 r=m%n
           E2 if r= 0

              return n(即为最大公因数)

            else
                m = n;n = r;返回 E1

    平均比较次数Tn=(12*ln2)/pi^2)*lnn

    扩展的欧几里德算法:

    给定的两个正整数a,b,计算它们的最大公因子d和两个整数a和b,使得ax+by=d

    要证明这个定理,首先需给出一个定理

    带余除法:

    若a,b是两个整数,其中b>0,则存在两个整数q,r,使得

                   a = b*q + r  0<=r<b

    ,并且q和r是唯一的。

    这个定理证明是简单的,有了这个定义,我们就来证明欧几里德算法
                  

    a = q0*b + r0
    b = q1*r0 + r1
    r0= q2*r1 + r2
     ...
    rn-3=qn-1*rn-2 + rn-1
    rn-2 = qn * rn-1 + rn(rn = 0)

    这里rn-1就是最大公约数。
    现在就需要反推回去,可以得到r可以用a,b线性表示

    Ri=(Xi-2-Qi*Xi)*a-(Yi-2-Qi*Yi-1)*b

    下一步就是求x,y的值。

    Xi=Xi-2-Qi*Xi-1
    Yi=Yi-2-Qi*Yi-1

    而我们很容易得到x0,y0,x1,y1的值,那么递推,我们就可以得到x,y的值

    算法描述


    E1 x0=0,y0=1;x1=1,y0=0,c=a,d=b
    E2 q<-c/d r<-c%d
    E3 if r=0
        return
       else E4
    E4
        x=x0-q*x1
        x0=x1;x1=x
        y=y0-q*y1
        y0=y1;y1=y


     http://blogold.chinaunix.net/u/32610/showart_353805.html

  • 相关阅读:
    CentOS7安装mysql
    strusts2的开发包
    CentOS7配置mavne国内镜像
    卸载linux自带的jdk
    Centos7安装nodejs
    redis启动方式
    bash学习笔记——Shell变量
    bash学习笔记——bash是什么
    教育管理系统——android家长客户端
    php入门学习——php与jsp对比
  • 原文地址:https://www.cnblogs.com/Cmpl/p/2016307.html
Copyright © 2020-2023  润新知