网上找到的是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=a;
while(l%b)
&nbs