C语言 | 最大公因数和最小公倍数

如何求两个数的最大公因数和最小公倍数呢?这个题目是灵活应用运算关系符的典型例题,开拓解决问题的思维方式,下面来看看是怎么做的吧!


1.方法一

(1)思路:遍历1到n1或者n2(取决于两个数的大小)中的每个数,如果这个数对n1,n2取余都是0,那么将这个数赋值给gcd变量。

#include <stdio.h>
 
int main()
{
    int n1, n2, i, gcd;
 
    printf("输入两个正整数,以空格分隔: ");
    scanf("%d %d", &n1, &n2);
 
    for(i=1; i <= n1 && i <= n2; ++i)
    {
        // 判断 i 是否为最大公约数
        if(n1%i==0 && n2%i==0)
            gcd = i;
    }
 
    printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
 
    return 0;
}

(2)分析:这种方法要把小于较小值的所有的数字都遍历一遍,复杂度较高。

2.方法二

(1)思路:这个算法的数学原理我不清楚,如果有知道的评论告诉我哦!我把步骤写下来:例如输入16和4

  • 第一次循环:n1 = 16,n2 = 4
  • 第二次循环:n1 = 12,n2 = 8
  • 第三次循环:n1 = 4 ,n2 = 8
  • 第四次循环:n1 = 4 ,n2 = 4
#include <stdio.h>
int main()
{
    int n1, n2;
    
    printf("输入两个数,以空格分隔: ");
    scanf("%d %d",&n1,&n2);
 
    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("GCD = %d",n1);
 
    return 0;
}

3.方法三

(1)思路:这个算法被称为辗转相除法,也叫欧几里得算法,数学原理请参见:https://blog.csdn.net/xinanbo/article/details/113356018

#include <stdio.h>

int main()
{
    int a,b;
    int t;
    scanf("%d %d", &a, &b);
    while (b !=0 ){
        t = a%b;
        a = b;
        b = t;
        printf("a=%d b=%d t=%d\n",a , b, t);
    }
    printf("最大公约数是%d\n", a);
    return 0;
}

4.方法四

递归的方式实现,我这里就不多写了,可以自己试着写一下。

5.最小公倍数

我这里只给出一个公式,两个数的积 = 最大公因数 * 最小公倍数

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值