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

news2024/9/21 6:49:38

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

文章目录

  • 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.coloradmin.cn/o/1304198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改 vCenter Server 的 FQDN | hostname | PNID

目录 1 先决条件2. 修改 VC 7.0.3 hostname&#xff08;1&#xff09;备份 VCSA&#xff08;2&#xff09;为VCSA的新hostname创建DNS记录&#xff08;3&#xff09;修改 VCSA 的hostname① 进入vCenter Server VAMI② 查看当前 FQDN③ 编辑网络设置④ 选择网络适配器⑤ 修改 h…

【Linux】 线程池

线程池 什么是线程池&#xff1f; 一次预先申请一批线程&#xff0c;让这批线程有任务&#xff0c;就处理任务&#xff1b;没任务&#xff0c;就处于等待状态。 为什么要有线程池&#xff1f; 以空间换时间&#xff0c;预先申请一批线程&#xff0c;当有任务到来&#xff0c;可…

arkts编译报错-arkts-limited-stdlib错误【Bug已完美解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

基于深度学习的yolov5入侵检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介IntroductionYOLOv5 Overview入侵检测系统架构1. 数据采集2. YOLOv5模型训练3. 实时监测4. 告警与反馈 性能评估与优化 二、功能三、系统四. 总结 一项目简…

渗透测试是什么

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;渗透测试作为一种重要的安全评估方法&#xff0c;已经被越来越多的企业和组织所采用。渗透测试通过模拟黑客攻击&#xff0c;发现并修复潜在的安全漏洞&#xff0c;从而提高系统的安全性。 直白的说…

【数据安全】金融行业数据安全保障措施汇总

数字化的今天&#xff0c;数据的价值不可估量&#xff0c;尤其是金融行业&#xff0c;数据不仅代表着企业的核心资产&#xff0c;还涉及到客户的隐私和信任。因此对于金融行业而言&#xff0c;保障数据安全至关重要。下面我们就来一起讨论为什么金融行业要保障数据安全&#xf…

功能介绍 | 红队企业版全新功能定时扫描与企业版报告强势来袭!

0x01 前言 面对大型企业复杂且庞大的网络环境&#xff0c;我们通常会遇到资产繁杂、边缘资产发现困难以及资产种类梳理不全等问题。Goby红队企业版的出现&#xff0c;旨在除了满足企业在漏洞扫描、威胁情报分析、安全评估等方面的基础需求之外&#xff0c;我们也在一直持续更新…

12.5单端口RAM,JS计数器,流水线乘法器,不重叠序列检测器(状态机+移位寄存器),信号发生器,交通灯

单端口RAM timescale 1ns/1nsmodule RAM_1port(input clk,input rst,input enb,input [6:0]addr,input [3:0]w_data,output wire [3:0]r_data );reg [6:0]mem[127:0];integer i;always (posedge clk or negedge rst) beginif(!rst) beginfor (i0; i<127 ; ii1) beginmem[i]…

Python3 中常见的数据类型

目录 数字(Number)总结 字符串(String)字符串运算符字符串格式化字符串的截取总结 List&#xff08;列表&#xff09;更新列表删除列表元素列表函数&方法总结 Tuple&#xff08;元组&#xff09;修改元组删除元组总结 Set&#xff08;集合&#xff09;Dictionary&#xff0…

Java实现快速排序算法

快速排序算法 &#xff08;1&#xff09;概念&#xff1a;快速排序是指通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行&…

Python中的魔力编程:掌握面向对象之道

Python中的面向对象编程 背景&#xff1a; ​ 最近在看一些代码的时候&#xff0c;对类中的一些内置方法不是很懂&#xff0c;因此出一篇文章来细说一下&#xff0c;希望大家看完后对Python中类有一个清楚的认识。 基础铺垫&#xff1a; ​ 面向对象的三个特点&#xff1a;…

案例课6——追一科技

1.公司介绍 追一科技是一家企业级智能服务AI公司&#xff0c;创立于2016年3月&#xff0c;主攻深度学习和自然语言处理&#xff0c;为金融、零售、生活服务等领域企业提供智能服务系统和解决方案。 追一科技的智能服务系统AIforce&#xff0c;拥有AI语义理解能力、智能产品矩阵…

【Android】完美解决Cannot resolve method ‘subscribe(Observer<T>)‘

问题截图&#xff1a; 解决方法&#xff1a; 如上图&#xff0c;看我标123的三个地方&#xff0c;2标注的地方提示我们我方法实际返回的值是Observer<Res_GetCellCode>,而我想要返回的结果是&#xff1a;3标记的结果&#xff1a;Observer<Res_QueryCTInfo>&#xf…

python自动化运维快速入门,python自动化运维教程

大家好&#xff0c;给大家分享一下python自动化运维需要掌握的技能&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 面向学员 熟练使用计算机&#xff0c;对Windows、Linux 有一点了解从业职或在校学生 对目前从事互联网运维&#xff0c;想…

js 生成分享码或分享口令

代码 function getShareToken(length) {var characters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789;var shareToken ;for (var i 0; i < length; i) {var randomIndex Math.floor(Math.random() * characters.length);var randomChar character…

亚马逊云科技Amazon Bedrock,现推出更多模型选择和全新强大功能

亚马逊云科技在re:Invent 2023上宣布推出Amazon Bedrock更多模型选择和强大功能&#xff0c;帮助客户更轻松地构建和规模化针对其业务定制的生成式AI应用程序。 Amazon Bedrock是一项全面托管的服务&#xff0c;用户可轻松访问来自AI21 Labs、Anthropic、Cohere、Meta、Stabili…

CRM的作用:强化客户忠诚度和提升业务效益

随着国内市场的不断发展和企业数字化进程持续进行&#xff0c;许多人在工作和生活中或多或少都对CRM客户关系管理系统有所耳闻&#xff0c;但可能并不清楚CRM管理系统具体是什么&#xff0c;以及都有什么作用。这篇文章带您全面了解一下&#xff0c;CRM是什么&#xff0c;以及C…

java-两个列表进行比较,判断那些是需要新增的、删除的、和更新的

文章目录 前言两个列表进行比较&#xff0c;判断那些是需要新增的、删除的、和更新的 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实…

02基于matlab的卡尔曼滤波

基于matlab的卡尔曼滤波&#xff0c;可更改状态转移方程&#xff0c;控制输入&#xff0c;观测方程&#xff0c;设置生成的信号的噪声标准差&#xff0c;设置状态转移方差Q和观测方差R等参数&#xff0c;程序已调通&#xff0c;需要直接拍下。

bootstrap:下拉菜单

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>下拉菜单DEMO</title> <link rel"stylesheet" type"text/css" href"/cdn.bootcss.com/bootstrap/3.3.2/css/bootstrap.min.css"…