当前位置: 首页 > news >正文

最大公因数,最小公倍数详解

前言
对于初学编程的小伙伴们肯定经常遇见此类问题,而且为之头疼,今天我来给大家分享一下,最大公因数和最小公倍数的求法。让我们开始吧!
在这里插入图片描述

文章目录

  • 1,最大公因数
    • 法1
    • 法2
    • 法3
  • 2,最小公倍数
  • 3,尾声

1,最大公因数

首先提起最大公因数大家最先想到的就是辗转相除法。
假如求a,b的最大公因数x。其中a>b。a可以表示为nb+t,那么t=a-nb,因为x是a和b的公因数,将等式两边同时除以x得,t/x=a/x-n*b/x,那么我肯可以知道t/x是个整数,所以x是a和a%b的公因数,那么我们可知那么x也是b和a%b的公因数。所以a和b的最大公约数和b和a%b的最大公约数是一样的。那么我们就可以使用循环的方法求出最大公因数如下:

法1

#include<stdio.h>
int gcd(int a, int b)
{if (a > b)//判断大小事大数除以小数{int temp = a;a = b;b = temp;}while (a % b)//辗转相除{int temp = a;a = b;b = temp%b;}
}
int main()
{int a, b;scanf("%d %d", &a, &b);int ans = gcd(a,b);printf("%d", ans);return 0;
}

那么这样写有点麻烦,我们可以直接使用递归的方法解决而且速度更快。

法2

#include<stdio.h>
int gcd(int a, int b)
{if (a == 0)//当a为0时,b为最大公因数return b;return gcd(b, a%b);
}
int main()
{int a, b;scanf("%d %d", &a, &b);int ans = gcd(a,b);printf("%d", ans);return 0;
}

那么有没有更快的方法呢?当然有!我们都知道位运算的速度比除法运算快的多,那么我肯可以吧代码改成这样。

法3

#include<stdio.h>
int gcd(int a, int b)
{while (b ^= a ^= b ^= a %= b);//连等式是从右往左计算的,我们要知道a^a=0,a^0=a。那么连等式就可以等同于gcd(b,a%b)return a;
}
int main()
{int a, b;scanf("%d %d", &a, &b);int ans = gcd(a,b);printf("%d", ans);return 0;
}

这种算法是最快的

2,最小公倍数

正常求法求最小公倍数可能太过麻烦,但是我们要知道一个定理。假设x是a和b的最大公因数,y是a和b的最小公倍数,那么xy=ab。(如果不明白可以百度一下或者直接背下来当结论用)
所以我们就可以用上面的方法先求出x然后再用y=a*b/x求出y的值。

3,尾声

本期的分享到这里结束,如果觉得博主讲的不错的话请给博主一个点赞一个收藏支持一下,我们下期再见!

http://www.lryc.cn/news/260409.html

相关文章:

  • 无脑利用API实现文心一言AI对话功能?(附代码)
  • 加速数据采集:用OkHttp和Kotlin构建Amazon图片爬虫
  • lua安装
  • 博士毕业需要发表几篇cssci论文
  • UDP报文格式详解
  • Python自动化测试如何自动生成测试用例?
  • 椋鸟C语言笔记#27:字符串数字提取(atoi、atol、atoll、atof)
  • Git 命令使用总结
  • Linux常见面试题30题详细答案解析(二)
  • Linux查询指定时间点段日志Linux查询指定文件
  • 2023年华为HCIA认证H12-811题库讲解
  • MacOS上配置Jenkins开机自启动
  • 指针相关知识(入门)
  • 我的NPI项目之Android 安全系列 -- Android Strongbox 初识
  • 3、Kafka 线上集群部署方案怎么做?
  • 【Oracle】常用数据库sql记录
  • 在线监控网址源码/ 网站监控工具源码/ 网站监控系统源码/定时任务/网站网址URL状态监控神器
  • 【Mysql】myisam和innodb的区别?
  • vue 集成行政区域选择插件region和数据回显
  • The LINQ expression “xxx“ could not be translated
  • ubuntu下搜索文件的几种方法
  • openCV图像SIFT特征
  • 黑豹程序员-axios+springmvc传递数组
  • 34.用过JavaConfig方式的spring配置吗?它是如何替代xml的?
  • 解析Python的Lambda函数:【理解】与【运用】
  • C语言:实现字符串连接
  • 物联网终端设备众多,为何遥测终端机备受瞩目?
  • Swagger快速上手
  • 1.1 Python的起源与发展
  • springboot + thymeleaf + layui 初尝试