c语言 求最大公约数和最小公倍数

img

c语言程序设计题目,如图所示(*σ´∀`)σヾ(´∀`。ヾ)

你题目的解答代码如下:

#include<stdio.h>

int gcd (int a, int b)
{
  if (a < b)
    return gcd (b, a);
  else 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;
    scanf("%d", &a);
    scanf("%d", &b);
    if (a<0 || b<0)
        printf("Input Error");
    else
        printf("%d %d\n",gcd(a, b),lcm(a, b));
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

非递归的辗转相除法求公约数:

#include<stdio.h>
 
int gcd(int m,int n)
{
    int t;
    while (n){
        t = m % n;
        m = n;
        n = t;
    }
    return m;
}
 
int lcm (int m, int n)
{
  return m * n / gcd (m, n);
}
 
int main ()
{
    int a,b;
    scanf("%d", &a);
    scanf("%d", &b);
    if (a<0 || b<0)
        printf("Input Error");
    else
        printf("%d %d\n",gcd(a, b),lcm(a, b));

    return 0;
}

#include<stdio.h>
 
int gcd(int m,int n)
{
    int t;
    while (n){
        t = m % n;   //辗转相处法求,最大公约数,直接记住公式
        m = n;
        n = t;
    }
    return m;
}
 
int lcm (int m, int n)
{
  return m * n / gcd (m, n);
}
 
int main ()
{
    int a,b;
    scanf("%d", &a);
    scanf("%d", &b);
    if (a<0 || b<0)
        printf("Input Error");
    else
        printf("%d %d\n",gcd(a, b),lcm(a, b));
    return 0;
}

辗转相除法 求最大公约数
最小公倍数就是两数字相乘再除以最大公约数

关注我,我有许多这类题目的答案,主页资源下搜索