int LCM(int a,int b)//最小公倍数
{
int x=a,y=b;
int r=x%y;
while(r>0)
{
x=y;
y=r;
r=x%y;
}
return a*b/y;
}
int GCD(int x,int y) //求最大公约数
{
if(!x||!y) return x > y ? x : y;
for (int t; t=x%y;x=y,y=t);
return y;
}
#include<algorithm>
using namespace std;
int kgcd(int a,int b)//快速GCD
{
if(a==0) return b;
if(b==0) return a;
if(!(a&1) && !(b&1)) return kgcd (a>>1,b>>1) << 1;
else if(!(b&1)) return kgcd(a,b>>1);
else if(!(a&1)) return kgcd(a>>1,b);
else return kgcd(abs(a-b),min(a,b));
}