武汉汉阳天气预报:编写一个程序技术4个已知数的最小公倍数.

来源:百度文库 编辑:高校问答 时间:2024/04/24 14:26:14

//设a,b,c,d为已知的4个数.

int gbs(int a,int b,int c,int d) //这是求最小公倍数.
{
return a*b*c*d/gys(a,b,c,d)
}

int gys(int a,int b,int c,int d) //这是求最大公约数.
{int n=1;
while((a%n==0)&&(b%n==0)&&(c%n==0)&&(d%n==0))
{
n++;
}
return n;
}

很容易可以从求两个数的最小公倍数(最大公约数)扩展成n个数的。
假设有a1,a2,...,an个数,先求前两个数的最大约数,然后将其作为第一个数(此时数列中变为n-1个数),继续此过程即可得a1,a2...an的最大公约数(最小倍数同理)
下面函数中,gcd是求两个数最大公约数的,lcm是求最小公倍数的,lcm4是求四个数最小公倍数的
int gcd(int m,int n)
{
int t;
while(t=m%n)
{
m=n;
n=t;
}
return n;
}
int lcm(int m,int n)
{
return m*n/gcd(m,n);
}

int lcm4(int a,int b,int c,int d)
{
int t = lcm(a,b);
t = lcm(t,c);
t = lcm(t,d);
return t;
}

楼上经理的算法有点BUG,取四个数1,2,4,8代入就不对了……