三种方法实现两个正整数求最大公约数和最小公倍数 C语言实现

相减法

#include<stdio.h>

int main()
{
    int p,q,m,n;

    printf("请输入两个正整数,两者间用逗号隔开:\n");
    scanf("%d,%d", &p, &q);

    m=p;
    n=q;

    while(m!=n)//当两者不相等时,采用相减法求最大公约数
    {
        if(m>n)
            m=m-n;
        else
            n=n-m;
    }
    printf("他们的最大公约数是:%d\n",m);
    printf("他们的最小公倍数是:%d\n",p*q/m);//利用最大公约数与最小公倍数间的关系得到最小公倍数

}

这里写图片描述

辗转相除法

#include <stdio.h>

 int main()

{

    int m,n,k,a,b;

    printf("请输入2个正整数,两者间用逗号隔开:\n");

    scanf("%d,%d",&m,&n);//输入两个数字时用逗号隔开


//开始判定

    if(m<=0||n<=0)//如果两者中在任意一个为小于等于0

    {
        printf("输入有误,请您输入两个 正!整!数!\n");

    }

    else

    {

//交换两个数,始终让较大的一个等于m,较小的一个数等于n

        if(m<n)

        {

            k=m;

            m=n;

            n=k;

        }

        a=m;

        b=n;

//利用辗转相除法,直到b等于0为止

        while(b!=0)

        {

            k=a%b;

            a=b;

            b=k;

        }

        printf("最大公约数:%d\n",a);

        printf("最小公倍数:%d\n",m*n/a);

    }

}

这里写图片描述

穷举法

#include<stdio.h>
int main()
{
    int a,b,c;
    printf("请输入两个正整数:\n");
    scanf("%d,%d",&a,&b);

    //交换两个数,始终让较大的一个等于a,较小的一个数等于b

    if(a<b)
    {
        c=a;
        a=b;
        b=c;
    }
    //直到a和b除以c余数都为0结束

    for(c=b;a%c||b%c;c--);

    printf("他们的最大公约数是:%d\n",c);//此时c就是两者的最大公约数
    printf("他们的最小公倍数是:%d\n",a*b/c);
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/asd1508010219/article/details/82533458