网上找到的是PASCAL的……于是自己转成C++来写一遍……
1.求两数的最小公倍数和最大公约数
//
(辗转相除法/欧几里德算法)
// 求两数的最大公约数
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=
// 求两数的最大公约数
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=