很骚的get
///用于计算a和b的最大公约数gcd和最小公倍数lcm
LL gcd(LL a,LL b){return b==0?a:gcd(a,b%a);}
LL lcm(LL a,LL b) {return a/gcd(a,b)*b;}
///为什么要先除后乘呢,因为存在超过long long的情况,所以先除相对来说更安全一点
///用于计算ax==b(mod m)的一个特解(返回值最小),如果没有特解返回m本身
LL gcd_ex(LL a,LL b,LL &x,LL &y)
{
if(b==0) {x=1;y=0;return a;}
LL d=gcd_ex(b,a%b,y,x);
y=y-a/b*x;
return d;
}
LL solve(LL a,LL b,LL m)
{
LL x,y;LL d=gcd_ex(a,m,x,y);
if(b%d==0){x%=m;while(x<0) x+=m;x%=m;return x*(b/d)%(m/d);}
else return m;
}
GCD
最新推荐文章于 2019-02-10 16:53:44 发布