zoukankan      html  css  js  c++  java
  • 扩展欧几里得总结

    昨天做了一道题,发现我对扩展欧几里得理解的还不够透彻。

    下面来说说扩展欧几里得。

    Ax+By+C=0;那么我们求解这个方程,我们可以将C移到方程右边那Ax+By=-C;

    然后我们先分析下A,B的符号,那么如果A=0,那么By=-C;直接求解,如果B能够整除C的话,那么Y=-C/B;那么x可以取任意整数值,同理当B=0时,那么当A=B=0时,C=0,那么x,y取任意的值,当C不为0则无解。

    下面来说下扩展欧几里得 的算法原理:

    我们求解 ax+by=gcd(a,b);这里我们假定a>0&&b>0; 那么由欧几里的求最大公约数可以知道gcd(a,b)=gcd(b,a%b);

    那么我们可以写得方程a'x+b'y’=gcd(a',b');这里我们设a=b;b'=a%b;那么这两个方程是等价的可以写成

    ax+by=a'x'+b'y';那么a%b=a-b×(a/b);那么ax+by=bx'+(a-b×(a/b))×y';那么合并一下ax+by=ay'+b(x'-(a/b)y');

    那么可以得到x=y’,y=x'-(a/b)y';最后我们可以的到a×1+b×0=a=gcd(a,b);我习惯于先求a/(gcd(a,b))x+b/(gcd(a,b))=1的解;

    然后ax+by=-C×(a/(gcd(a,b))x+b/(gcd(a,b)));然后的x=-C/gcd(a,b)x;y=-C/gcd(a,b)*y;最后通解为x+t×/gcd(a,b);y-t*gcd(a,b);

     1 LL  gcd(LL n,LL m)
     2 {
     3         if(m==0)
     4         {
     5                 return n;
     6         }
     7         else if(n%m==0)
     8         {
     9                 return m;
    10         }
    11         else return gcd(m,n%m);
    12 }
    13 pair<LL,LL>P(LL n,LL m)
    14 {
    15         if(m==0)
    16         {
    17                 pair<LL,LL>ask=make_pair(1,0);
    18                 return ask;
    19         }
    20         else
    21         {
    22                 pair<LL,LL>an=P(m,n%m);
    23                 LL x=an.second;
    24                 LL y=an.first;
    25                 y-=(n/m)*x;
    26                 an.first=x;
    27                 an.second=y;
    28                 return an;
    29         }
    30 }

    假如A*B>0;1.(a<0)那么方程可以变为abs(A)x+abs(B)y=C;然后用扩展欧几里得求解即可;

    那么这样假设我们要求解在某个范围内的x,和某个范围内的y,这样的解有多少组时,那么我们先求出特解,然后二分t的值,同时二分y中t的值,这样求两个t的重合处就为组数。

    假如A*B<0,如果A<0的时候我们改变方程得abs(A)x+abs(B)y=C;我们先解得特解x1,y1;而原方程为abs(A)x-By=C;-By=B(y1)那么特解y=-y1;这时abs(A)(x1+B*t)-B(-y1+abs(A)t);那么这时和上面一样二分找t就行。

    假如A*B<0,如果A>0;那么abs(A)x+abs(B)y=-C;解得特解x1,y1;原方程为abs(A)x-abs(B)y=-C;那么特解y=-y1;这时abs(A)(x1+B*t)-abs(B)(-y1+abs(A)t);

    下面给个很好的题的连接http://www.cnblogs.com/zzuli2sjy/p/5583123.html

    油!油!you@
  • 相关阅读:
    java第九周上机
    安卓-计算器
    安卓第四周作业
    第十五周作业
    第十三周作业
    第十三周上机作业
    第十二周作业
    第十二周上机作业
    第十一周作业
    第十一周上机作业
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5583980.html
Copyright © 2011-2022 走看看