• 最大公约数与扩展欧几里得算法[数论]


    ——!x^n+y^n=z^n  

      最大公约数(gcd)及其算法(欧几里得算法)

    对于正整数 a,b 若存在c使得c|a且c|b,则称c为a,b的公约数,若c还满足a=pc,b=qc,且p,q互质,则称c为a,b的最大公约数,记为(a,b)。

    当然我们可以用枚举的方法求gcd,但还有一种算法可以高效解决这一问题,叫做欧几里得算法...这里主要给出一种证明...

    欧几里得算法:(a,b)=(a,b%a)[不妨设a<=b]

    ``````

    证明:

    设(a,b)=c;

    则a=pc,b=qc,且(p,q)=1;

    由带余除法可知,b=am+r,0=<r<a;

    ∵a=pc,b=qc

    ∴r=c(q-mp)

    这表明c是r的约数,故c|(a,b%a);

    若c≠(a,b%a) 记c'=(a,b%a),c'>c;

    即r=c(q-mp)=b-am=c'r'

       a=c'a'

    =>b=c'r'+c'a'm 这表明c'|a,c'|b,然而c'>c 这与c是(a,b)矛盾

    固原命题得证。

    ``````

    身为lowbee的我乱写一通代码:

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

      裴蜀定理与扩展欧几里得:

    裴蜀定理:ax+by=c   <=>   (a,b)|c  <=>   ax+by=(a,b)有解

    特别地,ax+by=1   <=>   (a,b)=1 (其实证明这个就能得到一般的裴蜀定理)

    ``````

    简单说明一下,记住就好把,别太纠结:

    若(a,b)=1,则b不整除 a,2a,L,(b-1)a;(这个操作比较显然...)···①

    下证上面的式子除以b两两不同:

    若存在ka≡ ma(mod b),那么b|a(k-m)[不妨设k>m,且k,m∈[1,(b-1)]∩N]

    这与①产生矛盾,故命题成立。

    故一定存在0<k<b使得 ka≡1(mod b),即存在 ax+by=1。

    ``````

    那么问题来了,怎么求解x,y?

    若x=x0,y=y0是方程的一组解,且(a,b)=1,我们容易得到她的所有解:

    a(x0+tb)+b(y0-ta)=1 (t∈Z)。

    所以我们只要求得一组解就行了。当然这个问题不好想,如果a|b,那就十分显然了

    a*1+b*0=a(gcd(a,b))[特殊情况的话a=1],这时候能想到什么?

    欧几里得算法!

    我们先假设  ax0+by0=1(a>b),我们考虑b,a%b的情况,由裴蜀定理我们易知:

    存在 bx1+(a%b)y1=1=ax0+by0成立,如果我们在运用编程的特性,我们可以知道:

    a%b=a-[a/b]*b,这意味着我们可以对上式进行变形(这种操作就自己画画把…)

    得到:

    x0=y1;y0=x1-[a/b]y1;

    这不就是很好的递归操作吗?其实这就是上面这个操作就是扩展欧几里得算法。

    接下来是蒟蒻的渣代码:

    int x,y;
    void egcd(int a,int b){
        if(b==0){
            x=1;
            y=0;
            return ;
        }
        int p,q;
        egcd(b,a%b);
        p=y;
        q=x-(a/b)*y;
        x=p;
        y=q;
        return ;
    }

    可以去做同余方程加深理解(luogu的...):https://www.luogu.org/problem/show?pid=1082#sub

    2017-07-21

  • 相关阅读:
    C#中的cookie编程
    C# 键值对数据排序
    C#操作json类型数据
    深刻理解C#的传值调用和传引用调用
    .Net程序员玩转Android开发--ListView单击事件
    C#与Visual Basic的异与同
    初识C#程序结构
    【转】Java学习---线程间的通信
    【转】Mysql学习---MySQL悲观锁中的排它锁
    Linux uptime命令详解
  • 原文地址:https://www.cnblogs.com/_inx/p/7217842.html
Copyright © 2020-2023  润新知