首页 > 其他 > 详细

gcd

时间:2019-08-07 01:21:49      阅读:106      评论:0      收藏:0      [点我收藏+]

辗转相除法求最大公约数(gcd)

技术分享图片
#define ll long long
ll gcd(ll a,ll b){
    return b==0?a:gcd(b,a%b);
}
View Code

 

拓展gcd

gcd(a,b) = d

求绝对值和最小的x,y,使得a*x + b*y = d

gcd(a,b) = d   gcd(b,a%b) = d

x1*a + y1*b = d                            ①

x2*b + y2*(a - (a/b)*b) = d            ②

由②可得,

y2*a + (x2 - (a/b)*y2)*b = d          ③

由①,③可得

x1 = y2

y1 = x2 - (a/b)*y2

技术分享图片
void exgcd(ll a,ll b,ll &x,ll &y,ll &ans){
    if(b==0){
        ans = a;
        x = 1;
        y = 0;
        return ;
    }
    exgcd(b,a%b,y,x,ans);
    y += (a/b)*x;
    return;
}
View Code

 

 裴蜀定理

由拓展gcd可得 , a*x + b*y = c有解的充要条件是c为gcd(a,b)的整数倍

定理推广:

ax + by + cz + ···+nm = f 的充要条件是f 为gcd(a,b,c,...,m)的整数倍

gcd

原文:https://www.cnblogs.com/ljinggg/p/11311844.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!