码迷,mamicode.com
首页 > 其他好文 > 详细

扩展欧几里德

时间:2016-08-14 12:56:39      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

对于不完全为0的非负整数a, b.  gcd(a, b)表示a, b 的最大公约数。那么存在整数x y使得 gcd(a, b) = a * x + b * y;

不妨设a > b

 ,当b = 0 时,gcd(a, b) = a , 此时 x = 1, y = 0;

 ,当 a * b <> 0 时,

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

    b * x0 + (a % b) * y0 = gcd( b, a % b);   (2)

由朴素的欧几里德公式; gcd(a, b) = gcd (b, a % b);

(1)(2)  a * x + b * y = b * x0 + (a % b) * y0

                     = b * x0 + (a – a / b * b) * y0               

                     = a * y0 + ( x0 – a / b * y0 ) * b

          所以 x = y0, y = x0 – a / b * y0;

 

void extend_euild(int a, int b)
{
    if(b == 0)
    {
        t = 1;
        p = 0;
        c = a;
    }
    else {
        extend_euild(b, a%b);
        int temp = t;
        t = p;
        p = temp - a/b*p;
    }
}

 

扩展欧几里德

标签:

原文地址:http://www.cnblogs.com/jasonlixuetao/p/5769757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!