【蓝桥杯】求既约分数—>(全解)最大公约数与最小公倍数

news2024/11/17 9:51:52

前言:

通过对【蓝桥杯】2020初赛的一道求既约分数的题目的讲解,引出关于求“最大公约数与最小公倍数”的方法汇总。

对于“最大公约数与最小公倍数”来说,求解都有一些固定的方法,而这些方法一般都是固定的,只需要掌握方法,在日后遇到类似题目直接套用即可。


目录

蓝桥杯题目:既约分数

 思路分析:

完整代码:

求最大公约数:

一、辗转相除法

二、更相减损法

三、穷举法

 四、递归(辗转相除)

 求最小公倍数:

一、穷举法

二、a*b/最大公约数


蓝桥杯题目:既约分数

 思路分析:

首先我们需要利用双层循环搭配产生分子与分母,得到这些数字后,在循环中判断这两个数是否满足他们的最大公约数为1即可,那么我们先做框架,再做细节,所以主函数(框架)这样设计:

int main()
{
	int i = 0;
	int count = 0;
	for (i = 1; i <= 2020; i++)
	{
		int j = 0;
		for (j = 1; j <= 2020; j++)
		{
			if (gcd(i, j) == 1)//判断他们的最大公约数是否为1
				count++;
		}
	}
	printf("%d", count);
	return 0;
}

之后我们只需要再做细节,设计函数,如果你不知道如何设计求最大公约数的函数的话,在文章后面详细讲解了如何求最大公约数以及如何求最小公倍数。 

完整代码:

int gcd(int a, int b)
{
	int z = b;
	while (a % b)
	{
		z = a % b;
		a = b;
		b = z;
	}
	return z;
}

int main()
{
	int i = 0;
	int count = 0;
	for (i = 1; i <= 2020; i++)
	{
		int j = 0;
		for (j = 1; j <= 2020; j++)
		{
			if (gcd(i, j) == 1)
				count++;
		}
	}
	printf("%d", count);
	return 0;
}

答案:2481215


求最大公约数:

一、辗转相除法

通俗的将就是让两个数除留余数,当余数不为0时,继续用除数除以得到的余数,重复这一过程直到余数为0,此时的除数即为最大公约数,用图片表示为:

 代码实现:

int gcd(int a, int b)
{	
	int z = b;//如果初始情况a%b的结果为0,那么此时除数b的值即为最大公约数
	while(a % b!= 0)
	{
		z = a % b;
		a = b;
		b = z;	
	}
	return z;
}

二、更相减损法

以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。循环这个操作,直到所得的减数和差相等为止。

代码实现:

int gcd(int a,int b)
{
	while (a != b)
	{
		if (a > b)
		{
			a = a - b;
		}
		else
		{
			b = b - a;
		}
		return a;
	}
}

三、穷举法

穷举法的思路很简单,他的最坏情况时间复杂度极高,不建议使用

利用定义暴力穷举,创建一个临时变量保存其中一个数的值,循环判断是否满足最大公约数的定义,不满足就减一,直到找到这个数。

代码实现:

int gcd(int a, int b)
{
	int tmp = 0;
	for (tmp = a; ; tmp--)
	{
		if ((0 == a % tmp) && (0 == b % tmp))
			break;
	}
	return tmp;
}

 四、递归(辗转相除)

思想同辗转相除法。

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

 求最小公倍数:

一、穷举法

与求最大公约数的穷举法一样的思路,同样他最坏情况的时间复杂度非常高,不建议使用

代码实现:

int lcm(int a, int b)
{
	int tmp = a > b ? a : b;
	while (1)
	{
		if ((0 == tmp % a) && (0 == tmp % b))
			break;
		tmp++;
	}
	return tmp;
}

我们可以对这个穷举法进行一定的优化,由每次加一试数改为以乘数加一试数。

代码实现: 

int lcm(int a, int b)
{
	int i = 1;
	while ((a * i) % b)
	{
		i++;
	}
	return (a * i);
}

二、a*b/最大公约数

此方法利用最小公倍数的定义得到,即最小公倍数= a*b/最大公约数。

int lcm(int a, int b)
{
    int z = 0;
	int n = a * b;
    //计算最大公约数z
	while (z = a % b)
	{
		a = b;
		b = z;
	}
	return (n / z);//最小公倍数=(a*b)/最大公约数
}

求最大公约数类似的问题在算法比赛中很常见,希望这篇文章可以给你带来收获。

🔥🔥🔥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636956.html

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

相关文章

亚马逊、Allegro卖家建立属于自己的测评系统,实现批量优质账号养成

卖家搭建一套完整的测评系统&#xff0c;卖家自己能够养出批量优质账号&#xff0c;并完全掌控真实买家的浏览、加购、下单和评价等风控数据规律。我们的系统能够自主加速推广&#xff0c;防御反击&#xff0c;同时节省运营成本&#xff0c;实现高效的测评运营。 我们的系统支…

传统印刷企业需要部署数字工厂管理系统吗

随着数字化技术的快速发展&#xff0c;传统印刷企业面临着巨大的市场竞争压力。为了提高生产效率&#xff0c;降低生产成本&#xff0c;越来越多的企业开始考虑部署印刷数字工厂管理系统。但是&#xff0c;对于许多企业来说&#xff0c;是否部署印刷数字工厂仍然是一个需要权衡…

【国产复旦微FMQL45教程】-小试牛刀之LED

本教程采用 FMQL7045 FPGA开发板来完成整个试验&#xff0c;板卡照片如下&#xff1a; 具有丰富的接口资源&#xff0c;系统框图如下&#xff1a; 本教程用于完成基于Vivado的FMQL45的LED实验&#xff0c;目标是能够将这款开发板PL端先跑起来。 对于纯 PL 设计&#xff0c;我们…

002、体系结构之TiDB Server

TiDB Server 1、TiDB总览1.1、TiDB Server架构1.2、TiDB Server 主要功能&#xff1a; 2、SQL语句处理语句的解析和编译SQL层协议层上下文解析层逻辑优化器物理优化器本地执行器分布式执行器 3、如何将表的数据转成kv形式4、在线DDL相关模块5、GC机制与相关模块6、TiDB Server …

pyecharts案例三——河南省疫情地图绘制

代码实现 代码的业务流程基本和全国疫情地图相同&#xff0c;注意城市名结尾必须有“市”才能识别 import json from pyecharts.charts import Map from pyecharts.options import *f open("./疫情.txt", "r", encoding"UTF-8") data f.read…

暴力破解测试-业务安全测试实操(1)

业务安全测试实践模版理论指导_luozhonghua2000的博客-CSDN博客 测试原理和方法 暴力破解测试是指针对应用系统用户登录账号与密码进行的穷举测试,针对账号或密码进行逐一比较,直到找出正确的账号与密码。 般分为以下三种情况: 在已知账号的情况下,加载密码字典针对密码进行…

从美颜算法到AI美颜SDK:美丽的背后隐藏着什么?

在年轻人的生活中&#xff0c;通过美颜SDK类型的美颜工具进行拍摄已经成为了一种全新的文化现象。时下&#xff0c;AI美颜、美颜SDK讨论热点极高&#xff0c;那么大家知道美颜算法和AI美颜到底有什么不同吗&#xff1f;它们背后隐藏着什么样的技术和思想&#xff1f; 一、美颜算…

java的StringBuilder、Stringjoiner

一、StringBuilder StringBuilder可以看成是一个容器&#xff0c;创建之后里面的内容是可变的。作用是提高字符串的操作效率。 注意&#xff1a;使用String创建字符串对象时&#xff0c;是不能改变字符串的内容的&#xff0c;例如&#xff1a; String s1 "aaa"; St…

【解决MySQL-jdbc连接问题】com.mysql.jdbc.Driver was not found, trying direct instantiat

启动服务时出现报错 com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassNamecom.mysql.jdbc.Driver was not found, trying direct instantiation.而且接口有时候能访问成功&#xff0c;有时候的超时连接&#xff0c;异常的慢 经查询&#xff0c…

BUUCTF Alice与Bob 1

题目描述&#xff1a; 密码学历史中&#xff0c;有两位知名的杰出人物&#xff0c;Alice和Bob。他们的爱情经过置换和轮加密也难以混淆&#xff0c;即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样&#xff0c;孤傲又热情。下面是一个大整数:98554799767,请分解…

HTMLCSS Day03 CSS字体及文本样式

文章目录 1.文本属性- 颜色属性在CSS中如何通过color属性来修改文字颜色英文单词rgbrgba十六进制 - font-style 用于打开和关闭斜体文本- font-weight 为字体设置粗细程度- font-size 为文字指定大小- font-family 为文字指定特殊的字体&#xff0c;浏览器只会使用浏览器可以访…

动态规划dp —— 23.等差数列划分

1.状态表示 是什么&#xff1f;dp表中里的值所表示的含义就是状态表示 dp[i]表示&#xff1a;以i位置为结尾的所有子数组中有多少个等差数列 2.状态转移方程 dp[i] 等于什么 以i位置为结尾的等差数列&#xff0c;也就是说i位置必须和i-1&#xff0c;i-2位置构成等差数列&am…

98.实战网页构建定价部分-第一节

通过之前的文章我们实现如下的页面&#xff1a; ● 这节课我们来完成价目的部分 <section class"section-pricing"><div class"container"><span class"subheading">定价</span><h2 class"heading-secondary…

目前音质好的几款音频功放芯片

“音频功率放大器”简称音频功放&#xff0c;是扩声系统不可缺少的音响设备&#xff1b;是指把来自音源或前级放大器输出的弱信号放大并推动一定功率的音箱发出声音的集成电路。 音频功放可分为模拟功放和数字功放&#xff0c;传统模拟功放主要有A、AB、B、G类等&#xff0c;区…

vscode 实时同步代码到远程服务器

&#xff08;1&#xff09;在本地新建一个工程文件夹quant&#xff0c;将要同步的文件或者代码或文件夹放到quant里面&#xff1a; &#xff08;2&#xff09;创建sftp配置 使用 ctrlshiftp 快捷键调出输入框&#xff0c;选择 SFTP:Config 回车 会在 .vscode 目录下创建一个 s…

实验篇(7.2) 11. 创建点对点安全隧道(FortiGate-IPsec) ❀ 远程访问

【简介】前面我们实验的是FortiClient客户端与防火墙进行VPN连接&#xff0c;现在我们要做的实验是防火墙与防火墙之间进行VPN连接。现在我们来看看两台防火墙之间要怎样创建VPN连接。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器&#xff0c;用来对集团总部进…

基于Java+Spring+vue+element实现唯美鲜花商城购物系统

基于JavaSpringvueelement实现唯美鲜花商城购物系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

unocss 基础用法

一、什么是unocss unocss是一个即时的原子CSS引擎&#xff0c;它可以让你用简短的类名来控制元素的样式&#xff0c;而不需要写复杂的CSS代码。 当然&#xff0c;原子样式也有很多选择&#xff0c;最著名的就是 Tailwind。 但由于Tailwind 会生成大量样式定义&#xff0c;会导…

C语言函数的函数名和参数

VC6新建单文档工程&#xff1b; 视类添加2个函数&#xff1b; int getmax(int a,int b) {return a>b?a:b; }int two(int a) {return a * 2; } 调用&#xff0c;输出&#xff0c; void CMingView::OnDraw(CDC* pDC) {CMingDoc* pDoc GetDocument();ASSERT_VALID(pDoc);…

Segment-Anything的一些相关论文总结

1、 Segment Anything Model (SAM) Enhanced Pseudo Labels for Weakly Supervised Semantic Segmentation Tianle Chen, Zheda Mai, Ruiwen Li, Wei-lun Chao https://arxiv.org/abs/2305.05803 图像级监督的弱监督语义分割(WSSS)由于其标注成本较像素级标注低而受到越来越…