//(辗转相除法/欧几里德算法) //求两数的最大公约数 int gcd(int a,int b) ...{
if(b==0) return a; else return gcd(b,a%b); } //扩展:求出gcd(a,b)和满足gcd(a,b)=ax+by的整数x和y //理论依据:gcd(a,b)=ax+by=bx1+(a mod b)y1=bx1+(a-(a div b)*b)y1=ay1+b(x1-(a div b)*y1)) int exgcd(int a,int b,int&x,int&y) ...{
int t; if(b==0) ...{
x=1; y=0; return a; } t=x; x=y; y=t-a/b*y; return exgcd(b,a%b,x,y); } //求两数的最小公倍数 //(根据最大公约数直接计算) int lcm(int a,int b) ...{
return a*b/gcd(a,b); } //(直接计算) int lcm2(int a,int b) ...{
if(b>a) ...{
int t=a;a=b;b=t;} int l=