标签:virtual get int epo virt 百度 递归 blog return
最大公约数gcd()
inline int gcd(int a,int b){return (b==0)?a:gcd(b,a%b);}
最小公倍数lcm()
inline int lcm(int a,int b){return a/gcd(a,b)*b;}
拓展欧几里得exgcd(int a,int b,int &x,int &y)
作用:快速求整数x,y使得ax+by=gcd(a,b)
int exgcd(int a,int b,int &x,int &y){
if (b==0){
x=1,y=0;
return a;
}
int q=exgcd(b,a%b,y,x);
y-=a/b*x;
return q;
}
///递归写法
///复制自百度
int exgcd( int a,int b, int &x, int &y )
{
int r = a % b;
int x0, y0, x1, y1;
x0 = 1; y0 = 0;
x1 = 0; y1 = 1;
x = x1, y = y1;
while( r )
{
x = x0 - a / b * x1;
y = y0 - a / b * y1;
x0 = x1;
y0 = y1;
x1 = x;
y1 = y;
a = b;
b = r;
r = a % b;
}
return b;
}
//循环写法
//复制自简书
//不太理解exgcd,还没有验证
inline 表示是内联函数,就是在类内部展开,调用时没有入栈和出栈的过程,比较便捷
当一个函数需要经常使用,而且该函数的语句较少时,可以考虑使用内联函数
参考:inline用法详解
标签:virtual get int epo virt 百度 递归 blog return
原文地址:https://www.cnblogs.com/donke/p/10320945.html