zoukankan      html  css  js  c++  java
  • 扩展欧几里德

    扩展欧几里德算法

      要是 a*x + b*y = gcd(a,b) ,则一定存在整数对(x0 , y0)使其有解

      则 x = x0 + (b/gcd)*t , y = y0 - (a/gcd)*t 是不定方程的通解

      因为 a*x + b*y = gcd(a , b);

      又因为 gcd(a , b) = gcd(b , a % b);

      所以 b*x1 + (a % b)*y1 = gcd (此时a = b , b = a % b)
      gcd = b*x1 + (a - (a/b) * b) * y1;
      = b*x1 + a*y1 - (a/b) * b * y1;
      = a*y1 + b*(x1 - a/b*y1);

      x = y1;
      y = x1 - a/b * y1;

      依次类推
      当 b = 0 时
      a = gcd;

      定理1 gcd(a,b)是ax+by的线性组合的最小正整数,x,y∈z;

      定理2 如果ax+by=c,x,y∈z;则c%gcd==0;

      定理3 如果a,b是互质的正整数,c是整数,且方程
      ax+by=c

    代码如下:

     1 int exgcd(int a , int b , int &x , int &y) {
     2     int res = a;
     3     if(!b) {
     4         x = 1 , y = 0;
     5     }
     6     else {
     7         res = exgcd(b , a % b , x , y);
     8         int temp = x;
     9         x = y;
    10         y = temp - a / b * y;
    11     }
    12     return res;
    13 }
  • 相关阅读:
    Nodejs-原型链污染
    dpwwn-02靶机渗透
    dpwwn-01靶机渗透
    Bulldog1靶机渗透
    php+html实现用户登录退出
    DC4靶机
    vulnhub-Os-hackNos-3
    Linux系统解析XML中文乱问题
    idea添加database
    PL/SQL学习笔记
  • 原文地址:https://www.cnblogs.com/Recoder/p/5459812.html
Copyright © 2011-2022 走看看