第2个回答 2008-01-02
//算法还是这个算法,就是写法简单点
int fun(int *a,int n)
{
if (n==1)
return *a;
else
return fun2(a[n-1],fun(a, n-1));
}
//fun2是求2个数最小公倍数的函数,这个算法就多了
ps:这只是个算法,直接编译当然不能通过
第4个回答 2008-01-08
说明下:
对于自由的菜鸟的方法,此方法把第一个数用来对其它的数求余,然后发现其中有余数不为0的情况下对此数+1,直到对所有的数都取余数为0,则该数为最小公倍数。这个方法时第一个数应该是最大数,这样会更快一些。意思很明确,有人加以修改,将循环中改为将前两个数的公倍数然后继续使用直到得出结果,效果是一样的,效率应该会更高。
还有种方法是:
首先输入多个数,把它们存入数组a[N]中,然后求出数组中最大的数a[0],最后用最大的数分别与其他的数求余,如果能与每个数都能求余,则此数为最小公倍数,否则a[0]+=a[0],只到a[0]小于所有数的乘积为止.(几个互为素数的最小公倍数是它们的乘积)。
但是后者的效率不见得是最高的。
后一种方法的程序如下:
#include<stdio.h>
#define N 10
void main()
{
int i,a[N]={0},n,m,t,ji=1;
printf("shu ru suo qiu ge shu\n");
scanf("%d",&n);
printf("shu ru mei ge shu\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
if(a[i]>a[0])
{
t=a[0];
a[0]=a[i];
a[i]=t;
}
for(i=0;i<n;i++)
ji=ji*a[i];
for(m=a[0];m<=ji;m+=a[0])
{
int j=1;
while(j<n)
{
if(m%a[j]==0)
j++;
else
break;
if(j==n)
{printf("zui xiao gong bei shu shi %d\n",m);
goto mm;}
}
}
mm: ;
getch();
}