C++知识点总结(7):枚举算法之最大公约数和最小公倍数

news2025/1/11 22:38:02

一、枚举算法

        枚举算法,将问题的所有可能的情况进行逐一列举,然后筛选出符合要求的一种程序处理算法。

        枚举算法(特别是暴力枚举的时候)的缺点是,容易超时。一个计算机一般 1 秒最多运行 1e8 次,一旦超过 1e8 组数据,就有可能超时。

        枚举三要素:

1. 枚举对象(要枚举的对象)

2. 枚举范围(每一个枚举对象从几开始,到几结束)

3. 筛选条件(筛选满足一定条件的数据)

二、最大公约数

        约数:如果一个整数 a 能被整数 b 整除,那么 b 就是 a 的约数

        公约数:两个或者多个数公有的约数

        计算两个整数 a 和 b 的最大公约数,如何利用程序实现?

1. 枚举对象:1 个数 x(可能是最大公约数的数)

2. 枚举范围:1 <= x <= min(a, b)

3. 筛选条件:如果 a % x 是 0 ,并且 b % x 也是 0

建议倒序遍历

        根据上述思路,我们写出代码:

#include <iostream>
using namespace std;

int main()
{
	// 输入两个数字 
	int a, b;
	cin >> a >> b;
	
	// 枚举算法
	int minn = min(a, b);
	for (int i = minn; i >= 1; i--)
	{
		if (a % i == 0 && b % i == 0)
		{
			cout << i;
			break;
		}
	} 
	return 0;
}

时间复杂度O(n),概念图如下:

测试结果:

 

        于是,我们还需要继续……嗯,现在教大家一种方法——辗转相除法,用了就无敌了

        将除数 b 当作下一次的被除数,余数 r 当作下一次的除数。如此反复地进行,一旦余数是 0 ,最后余数是 0 算式的除数。

比如说 63 ÷ 24。

63 ÷ 24 = 余15

24 ÷ 15 = 余9

15 ÷ 9 = 余6

9 ÷ 6 = 余3

6 ÷ 3 = 余0

所以 63 和 24 的最大公约数是 3 。

        辗转相除法程序逻辑:

int a, b, r;
while (a % b)
{
    r = a % b; // 得到余数
    a = b; // 除数作为下一次的被除数
    b = r; // 余数作为下一次的除数
}
cout << b;

        是的,这样就 OK 啦。

三、最小公倍数

1. 枚举对象:1 个数 y(可能是最小公倍数的数)

2. 枚举范围:max(a, b) <= y <= a × b

3. 筛选条件:如果 y % a 是 0 ,并且 y % b 也是 0

建议正序遍历

#include <iostream>
using namespace std;

int main()
{
	// 输入 
	int a, b;
	cin >> a >> b;
	
	// 枚举算法
	int maxn = max(a, b);
	for (int i = maxn; i <= a*b; i++)
	{
		if (i % a == 0 && i % b == 0)
		{
			cout << i;
			break;
		}
	}
	return 0;
}

        拓展一个特殊关系:

整数 a × 整数 b = 最大公约数 × 最小公倍数

#include <iostream>
using namespace std;

int main()
{
	// 输入 
	long long a, b;
	cin >> a >> b;
	long long olda = a, oldb = b;
	
	// 枚举算法
	int r;
	while (a % b)
	{
		r = a % b;
		a = b;
		b = r;
	}
	cout << olda*oldb/b;
	return 0;
} 

        这样,其实我们最小公倍数用的就是公式,大部分都是最大公约数的程序。

四、真题

题目描述

输入两个正整数x0,y0(2<=x0<100000,2<=y0<=100000),求出满足下列条件的P,Q的个数

条件:

1.P,Q是正整数

2.要求P,Q以x0为最大公约数,以y0为最小公倍数.

试求:满足条件的所有可能的两个正整数的个数.

输入描述

输入二个正整数x0,y0(2<=x0<100000,2<=y0<=100000)

输出描述

输出满足条件的P,Q的个数。

样例1

输入

3 60

输出
 

4

提示

说明(不用输出)此时的P  Q分别为:

3   60

15   12

12   15

60    3

所以:满足条件的所有可能的两个正整数的个数共4种.

解题思路

1. 枚举对象:p ( q 可以通过 x × y ÷ p 得到)

2. 枚举范围:x <= p <= y
3. 筛选条件:如果 p 和最大公约数 x 相等

参考代码

#include <iostream>
using namespace std;

int main()
{
	// 输入 
	long long x, y;
	cin >> x >> y;
	
	// 枚举算法 
	long long p, q, cnt = 0;
	for (int i = x; i <= y; i++)
	{
		p = i;
		q = x*y/p;
		if (x * y % p == 0)
		{
			// 寻找 p 和 q 的最大公约数,得到最大公约数 q 
			while (p % q)
			{
				r = p % q;
				p = q;
				q = r;
			}
			if (q == x)
			{
				cnt++;
			}
		} 
	}
	
	// 输出所有可能 
	cout << cnt;
	return 0;
}

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

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

相关文章

fpga rom 初始化文件的一些心得

目录 可能遇到的问题 问题 解决方案 rom的初始化 用途 文件类型 如何生成初始化文件 示例 Altera Xilinx 可能遇到的问题 问题 altera FPGA的rom找不到初始化文件&#xff0c;编译过程会提示类似的问题 Error(127001): Cant find Memory Initialization File or He…

基于Java SSM框架+Vue实现企业公寓后勤管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现企业宿舍后勤管理网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

React--引入第三方插件时,标签名是小写报错问题

报错信息 报错原因 1.组件名得大写 2.缺少 import 语句 解决方案 declare global{namespace JSX{interface IntrinsicElements {micro-app: any}} }

跨网文件摆渡系统:安全、可控的数字传输桥梁

在企业高度信息化的时代&#xff0c;数据的流通与共享已经成为企业、组织乃至个人之间不可或缺的沟通方式。然而&#xff0c;在数据流通的过程中&#xff0c;我们经常会遇到各种难题和挑战&#xff0c;尤其是当涉及到不同网络环境之间的文件传输。这不仅需要保证文件的安全性&a…

015 OpenCV 霍夫变换(圆检测)

目录 一、环境 二、算法原理 三、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、算法原理 霍夫圆检测&#xff08;Hough Circle Detection&#xff09;是计算机视觉中一种常用的图像处理技术&#xff0c;主要用于检测…

汽车底盘构造之离合器

目录 1.离合器的工作原理 2.离合器的作用 3.对摩擦离合器的基本性能要求 4.离合器的分类 5.膜片弹簧离合器 5.1膜片弹簧离合器结构 5.2膜片弹簧离合器的弹性特性 5.3膜片弹簧离合器的分类 6离合器工作原理 6.1名词解释 6.2工作过程 1.离合器的工作原理 离合器位于发…

问CHAT:怎样保持数据库中数据的完整性?

CHAT回复&#xff1a;保持数据库中数据的完整性有以下一些方法&#xff1a; 1. 使用约束&#xff1a;数据库中的约束可以确保数据遵循特定的规则。 例如&#xff0c;我们可以使用 UNIQUE 约束防止在某列中插入重复值&#xff0c;使用 NOT NULL 约束防止插入空值&#xff0c;或…

含mask的单通道灰度图内容可视化python

输入&#xff1a;单通道的灰度图&#xff0c;灰度图内含不同像素值的掩膜mask 输出&#xff1a;灰度图内的掩膜mask在RGB图像中输出 方法很简单&#xff0c;就是读取灰度图&#xff0c;根据掌握的像素值信息&#xff0c;分别赋予不同的颜色值像素进行保存输出。 如下输入的单…

电容、电感和电阻

一、电感 1&#xff09;图片 2&#xff09;作用 a&#xff09;储存容量 例如dcdc转换器的原理,将一个电压值转换成另外一个电压值 b&#xff09;选择信号 比如空气中弥漫着很多信号&#xff0c;我们应该怎么选取我们所需要的信号。 电感和电容可以看成一个电阻&#xff0c;当电…

Tomcat 配合虚拟线程,一种新的编程体验

Java 21 在今年早些时候的 9 月 19 日就正式发布&#xff0c;并开始正式引入虚拟线程&#xff0c;但是作为 Java 开发生态中老大哥 Spring 并没有立即跟进&#xff0c;而是在等待了两个月后的 11 月 29 日&#xff0c;伴随着 Spring Boot 3.2 版本的发布&#xff0c;在这个版本…

【SSM源码】基于JAVA的高校竞赛和考级查询系统

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

解决websocket集群的session共享问题

在websocket中&#xff0c;服务端主要使用的是session打交道&#xff0c;但是由于session无法实现序列化&#xff0c;不能存储到redis这些中间存储里面&#xff0c;因此这里我们只能把session存储在本地的内存中&#xff0c;那么如果是集群的话&#xff0c;我们如何实现session…

数据库-PostgreSQL学习笔记

目录 PostgreSQL介绍与安装docker安装腾讯云免费领用1个月 数据库操作连接数据库实例创建数据库查看数据库列表使用数据库删除数据库修改数据库属性 表操作字段类型整数浮点数日期与时间类型字符串类型 DDLCREATEDROPALTER DMLINSERTUPDATEDELETE 查询查询所有数据查询部分列指…

YB2412B 600KHz 30V 3A 同步降压稳压器

YB2412B 600KHz 30V 3A 同步降压稳压器 简介&#xff1a; YB2412是一种具有内部功率 MOSFET 的高频、同步、整流、降压开关模式转换器。它提供了一个非常紧凑的解决方案&#xff0c;可以在一个广泛的输入供应范围内实现4a的峰值输出电流&#xff0c; 具有良好的负荷和线路调节能…

基于Java SSM框架实现美好生活九宫格日志网站系统项目【项目源码+论文说明】

基于java的SSM框架实现美好生活九宫格日志网站系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人…

爱德华|书客|飞利浦护眼台灯好不好用?多方位测评对比爆料!

说到护眼台灯相信大家都不陌生&#xff0c;很多办公族、学生党都会备上一台用于工作、学习。因为长时间的工作或者学习&#xff0c;会明显的感觉到眼睛疲劳和不适。而护眼台灯可以很好的解决这个难题&#xff0c;因为护眼台灯是经过科学的设计和研发的&#xff0c;护眼台灯可以…

ESP32-Web-Server编程-简单的照片浏览器

ESP32-Web-Server编程-简单的照片浏览器 概述 从本节开始我们开始制作一些有趣的多媒体 Web 的示例。 当你希望在网页上展示一些广告、照片&#xff0c;或者你的开发板带摄像头&#xff0c;能够采集一些图片&#xff0c;这时你希望可以通过手头的浏览器查看图片&#xff0c;…

训练lora小模型

训练lora小模型 一&#xff0c;安装部署本地训练环境1&#xff0c;下载源码2&#xff0c;下载模型 二&#xff0c;准备数据1&#xff0c;准备图片2&#xff0c;标注图片 三&#xff0c;修改配置1&#xff0c;修改文件名2&#xff0c;修改配置文件 &#xff0c;install.ps1 四&a…

聚观早报 |智界S7上路;荣耀与中国移动再牵手

【聚观365】12月4日消息 智界S7上路 荣耀与中国移动再牵手 新能源车11月销量成绩 比亚迪11月销量数据 赛力斯汽车11月销量数据 智界S7上路 华为举行智界S7及华为全场景发布会&#xff0c;带来了鸿蒙智行首款轿车智界S7&#xff0c;而其一经发布便在业内引起了关注。而其因…

(一)舒尔特表练习记

舒尔特表练习记 1 练习的开始 我们知道&#xff0c;一段时间中注意力的保持&#xff0c;对于学习效果的影响很大。我想应该不少朋友们有过和我相似的感觉&#xff0c;学着学着&#xff0c;就莫名开始容易走神&#xff1b;一行字看过去&#xff0c;发现自己脑子里什么也没有留…