C语言,最大公约数和最小公倍数

功能:求最大公约数以及最小公倍数。
下面代码中有些许错误,请进行改错。

img

代码里有点错误,修改如下所示:

#include<stdio.h>
int main()
{
    int m,n,m1,n1,a;
    
    scanf("%d %d", &m, &n);
    m1=m;
    n1=n;
     a = 0;
    
    while (a=m1 % n1)
    {
        m1 = n1;
        n1 = a;
    }
    
    printf("最大公约数为:%d\n", a);
    printf("最大公倍数为:%d\n", (m*n/a));
    return 0;
}

第7行用=,两个赋值之间用半角逗号

C语言中可以使用辗转相除法(欧几里得算法)来求最大公约数,使用公式GCD(a,b)=GCD(b,a%b)来递归求解。

代码示例:

#include <stdio.h>

int GCD(int a, int b) {
    if (b == 0) {
        return a;
    } else {
        return GCD(b, a % b);
    }
}

int LCM(int a, int b) {
    return a * b / GCD(a, b);
}

int main() {
    int a, b;
    printf("请输入两个正整数:\n");
    scanf("%d %d", &a, &b);
    printf("最大公约数为:%d\n", GCD(a, b));
    printf("最小公倍数为:%d\n", LCM(a, b));
    return 0;
}

输入示例:

请输入两个正整数:
8 12

输出示例:

最大公约数为:4
最小公倍数为:24