• 扩展欧几里得小感


    扩展欧几里得

    今天弄了个扩欧。还好吧(也许并未深入理解。。。)

    前置知识:裴蜀定理。

    ax+by=gcd(a,b)  必定存在x,y的整数解。(证明也没必要,能感性理解的吧)

    应用:已知a, b,求解一组x,y,使它们满足等式: ax+by =gcd(a, b)

    下面:

    设 a>b,那么当 b=0 时, gcd(a,b)=a, ax=a,则 x=1,y=0 

    设 ax1+by1=gcd(a,b) , bx2+(a%b)y2=gcd(a,b)   因为 gcd(a,b)==gcd(b,a%b)  , 所以  ax1+by1=bx2+(a-a/b*b)y2  -->  ax1+by1=bx2+ay2-a/b*b*y2 

    根据多项式恒等定理(两边的a,b一样):

    x1=y2 , y1=x2-a/b*y2  (这两句话很重要,求解的核心!!!)

    这样我们可以通过不断递归,直到 b=1, 求出解后返回来。

    奇妙啊!

    上代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a,b,x,y;
     4 inline int exgcd(int a,int b,int &x,int &y)
     5 {
     6     if (b==0)
     7     {
     8         x=1,y=0;
     9         return a;
    10     }
    11     int gcd=exgcd(b,a%b,x,y);
    12     int x1=x,y1=y;
    13     x=y1;
    14     y=x1-a/b*y1;
    15     return gcd;
    16 }
    17 int main()
    18 {
    19     scanf("%d%d",&a,&b);
    20     cout<<exgcd(a,b,x,y)<<endl;
    21     return 0;
    22 }
    View Code

    加油加油加油!!!fighting fighting fighting!!!

     

  • 相关阅读:
    CSS
    表单
    框架
    表格
    列表
    定位--position属性
    浮动
    选择结构
    数组
    TextView(标签控件)
  • 原文地址:https://www.cnblogs.com/Frank-King/p/9437582.html
Copyright © 2020-2023  润新知