C趣味程序(二)(07)求多个整数的最大公约数与最小公倍数
来源:优易学  2010-1-14 12:11:44   【优易学:中国教育考试门户网】   资料下载   IT书店
2.1.2 求多个整数的最大公约数与最小公倍数
对于3个或3个以上整数,最大公约数与最小公倍数有以下性质:
    (a1,a2,a3)=((a1,a2),a3)
    (a1,a2,a3,a4)=((a1,a2,a3),a4),...
    {a1,a2,a3}={{a1,a2},a3}
    {a1,a2,a3,a4}={{a1,a2,a3},a4},...
    应用这一性质,要求n个数的最大公约数,先求出前n-1个数的最大公约数t,再求第n个数与t的最大公约数。求n个数的最小公倍数也一样。这样递推实现求多个整数的最大公约数与最小公倍数。
程序代码如下:
#include<stdio.h>
int gy(int,int);
int gb(int,int);
void main()
{
    int a,b,c,d,i=2;
 int aa[10];
    printf("n个整数的最大公约记为(a1,a2,...an)\n");
    printf("n个整数的最小公倍记为{a1,a2,...an}\n");
    printf("n个整数逐个从键盘输入,以-1终止\n");
    printf("首先输入两个数a,b\n");
    scanf("%d,%d",&a,&b);
    c=a;
    d=a;
    aa[0]=a;aa[1]=b;
    while(b>0)
    {
        c=gy(c,b);        /*调用最大公约数函数*/
        d=gb(d,b);        /*调用最小公倍数函数*/
        printf("输入下一个整数(输入-1结束):to b:  ");
        scanf("%d",&b);
        aa[i]=b;
        i++;
    }
    printf("(");
    for(i=0;aa[i]!=-1;i++)
       printf("%d,",aa[i]);
    printf(") = %d\n",c);
    printf("{");
    for(i=0;aa[i]!=-1;i++)
       printf("%d,",aa[i]);
    printf("} = %d\n",d);
}
int gy(int x,int y)
{
    int c; 
    for(c=x;c>=1;c--)
    {
        if((x/c==(float)x/c)&&(y/c==(float)y/c))
            break;
    }
    return c;
}
int gb(int x,int y)
{
    int d;
    for(d=x; d<=x*y;d+=x)
    {
        if(d/y==(float)d/y) break;
    }
    return d;
}
程序运行结果如下:



说明:
    对n(n>=3)个整数,不存在最大公约与最小公倍的积等于这n个整数之积的性质。因此不能套用2个整数的性质,以防出错。

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训