NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)

news2025/5/14 2:14:39
约数和倍数
  • 如果a 除以b 没有余数,那么a 就是b 的倍数,b 就是a 的约数,记作b ∣ a 。
    约数,也称因数。
最⼤公约数和最⼩公倍数

最⼤公约数Greatest Common Divisor,常缩写为gcd。

  • ⼀组整数的公约数,是指同时是这组数中每⼀个数的约数的数。
  • ⼀组整数的最⼤公约数,是指所有公约数⾥⾯最⼤的⼀个。
    最⼩公倍数Least Common Multiple,常缩写为lcm。
  • ⼀组整数的公倍数,是指同时是这组数中每⼀个数的倍数的数。
  • ⼀组整数的最⼩公倍数,是指所有正的公倍数⾥⾯,最⼩的⼀个数。
    求两个数的gcd与lcm时,有如下性质:
  • 对于两个数a和b ,gcd(a, b) × lcm(a, b) = a × b。也就是最⼤公约数乘以最⼩公倍数等于两个数的乘积。
    因此,⼀般先求最⼤公约数,然后⽤这个性质求最⼩公倍数。
欧⼏⾥得算法

欧⼏⾥得算法也称辗转相除法,可以求出两个整数的最⼤公约数。
算法流程:
设a > b :

  • 如果b 是a 的约数,那么b 就是两者的最⼤公约数;
  • 如果b 不是a 的约数,那么gcd(a, b) = gcd(b, a mod b)
    因为a mod b 会不断减⼩,因此可以⽤递归进⾏求解
LL gcd(LL a, LL b)  
{  
	if(!b) return a; // 如果 b 等于 0,说明 a 就是最⼤公约数  
	return gcd(b, a % b);  
}

时间复杂度:
求gcd(a, b) 会遇到两种情况:

  1. a < b ,则gcd(a, b) = gcd(b, a)
  2. a > b ,则gcd(a, b) = gcd(b, a mod b)
    第⼆种情况会让a ⾄少折半,因此最多执⾏log n 次。
    第⼀种情况不会多于第⼆种,因此时间复杂度为O(log n)

证明gcd(a, b) = gcd(b, a mod b) ,思路:先证左边等于右边,再证右边等于左边。
设a > b ,a mod b = a - kb ,其中k = a/b ,为整数:

  1. 若d是(a, b)的公约数,则d | a且d | b ,于是d | (a - kb) ,则d | (a mod b) ;因此d也是(b, a mod b) 的公约数;
  2. 若d是(b, a mod b)的公约数,则d∣b且d∣(a - kb) ,于是d∣(a - kb + kb) = d∣(a) ;因此d也是(a, b)的公约数;
    所以(a, b) 的公约数与(b, a mod b) 的公约数相同,那么最⼤公约数也相同
B3736 [信息与未来 2018] 最大公约数 - 洛谷

三个数的最⼤公约数,先求其中两个的gcd,再与第三个求gcd

#include <bits/stdc++.h>
using namespace std;

int gcd(int a, int b)
{
    return b == 0 ? a : gcd(b, a % b);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int x, y, z; cin >> x >> y >> z;
    cout << gcd(gcd(x, y), z) << endl;

    return 0;
}
小红的 gcd

先将⼤数取模,然后再代⼊公式计算

秦九韶算法
秦九韶算法是⼀种将⼀元n次多项式的求值问题转化为n个⼀次式的算法。其⼤⼤简化了计算过程,即使在现代,利⽤计算机解决多项式的求值问题时,秦九韶算法依然是最优的算法
![[Pasted image 20250418145708.png]]

例如:对于⼀个整数987654321 ,可以拆成:
( ( ( ( ( ( ( 9 × 10 + 8 ) × 10 + 7 ) × 10 + 6 ) × 10 + 5 ) × 10 + 4 ) × 10 + 3 ) × 10 + 2 ) × 10 + 1 (((((((9 × 10 + 8) × 10 + 7) × 10 + 6) × 10 + 5) × 10 + 4) × 10 + 3) × 10 + 2) × 10 + 1 (((((((9×10+8)×10+7)×10+6)×10+5)×10+4)×10+3)×10+2)×10+1
这样对于⾼精度的数取模,就可以分阶段取模

#include <bits/stdc++.h>
using namespace std;

string a; int b;

int gcd(int a, int b)
{
    return b == 0 ? a : gcd(b, a % b);
}

int calc()
{
    long long t = 0;
    for (auto ch : a)
    {
        t = t * 10 + ch - '0';
        t %= b;
    }
    return t;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> a >> b;
    
    cout << gcd(b, calc()) << endl;
    
    return 0;
}

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

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

相关文章

《软件设计师》复习笔记(11.6)——系统转换、系统维护、系统评价

目录 一、遗留系统&#xff08;Legacy System&#xff09; 定义&#xff1a; 特点&#xff1a; 演化策略&#xff08;基于价值与技术评估&#xff09;&#xff1a; 高水平 - 低价值&#xff1a; 高水平 - 高价值&#xff1a; 低水平 - 低价值&#xff1a; 低水平 - 高价…

人像面部关键点检测

此工作为本人近期做人脸情绪识别&#xff0c;CBAM模块前是否能加人脸关键点检测而做的尝试。由于创新点不是在于检测点的标注&#xff0c;而是CBAM的改进&#xff0c;因此&#xff0c;只是借用了现成库Dilb与cv2进行。 首先&#xff0c;下载人脸关键点预测模型:Index of /file…

EDID结构

EDID DDC通讯中传输显示设备数据 VGA , DVI 的EDID由128字节组成&#xff0c;hdmi的EDID增加扩展块128字节。扩展快的内容主要是和音频属性相关的&#xff0c;DVI和vga没有音频&#xff0c;hdmi自带音频&#xff0c;扩展快数据规范按照cea-861x标准。 Edid为了让pc或其他的图像…

文件包含(详解)

文件包含漏洞是一种常见的Web安全漏洞&#xff0c;其核心在于应用程序未对用户控制的文件路径或文件名进行严格过滤&#xff0c;导致攻击者能够包含并执行任意文件&#xff08;包括本地或远程恶意文件&#xff09;。 1. 文件包含原理 动态文件包含机制 开发者使用动态包含函数…

《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​

&#x1f31f; ​大家好&#xff0c;我是摘星&#xff01;​ &#x1f31f; 今天为大家带来的是Scheduled和Quartz对比分析&#xff1a; 新手常见困惑&#xff1a; 刚学SpringBoot时&#xff0c;我发现用Scheduled写定时任务特别简单。但当我看到同事在项目里用Quartz时&…

安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器

打开 PowerShellfvm安装 dart pub global activate fvm安装完成后&#xff0c;如果显示FVM无法识别&#xff0c;那么需要去添加环境变量path添加这个&#xff1a;C:\Users\Administrator\AppData\Local\Pub\Cache\bin 常用命令 fvm releases 查看用户可以装的flutter版本fvm l…

Kafka系列之:计算kafka集群topic占的存储大小

Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…

智谱AI大模型免费开放:开启AI创作新时代

文章摘要&#xff1a;近日&#xff0c;国内领先的人工智能公司智谱AI宣布旗下多款大模型服务免费开放&#xff0c;这一举措标志着大模型技术正式迈入普惠阶段。本文将详细介绍智谱AI此次开放的GLM-4 等大模型&#xff0c;涵盖其主要功能、技术特点、使用步骤以及应用场景&#…

T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)

最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。 为了完成验证目标处理&#xff0c;首先需要有数据&#xff0c;然后需要准备对应的处理平台和工具箱&#xff0c;进行一系列。那么开始记录~ 前言&#xff1a; 为了基于种子点的功能连…

【前端基础】--- HTML

个人主页  :  9ilk    专栏  :  前端基础 文章目录 &#x1f3e0; 初识HTML&#x1f3e0; HTML结构认识HTML标签HTML文件基本结构标签层次结构快速生成代码框架 &#x1f3e0; HTML常见标签注释标签标题标签 h1-h6段落标签 p换行标签 br格式化标签图片标签 img超链接标签…

黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课

课程大小&#xff1a;60.2G 课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/90615581 更多资源下载&#xff1a;关注我 阶段一 中台战略与组件化开发专题课程 阶段二 【物流行业】品达物流TMS 阶段三 智牛股 阶段四 千亿级电商秒杀解决方案专题 …

C#插件与可扩展性

外接程序为主机应用程序提供了扩展功能或服务。.net framework提供了一个编程模型,开发人员可以使用该模型来开发加载项并在其主机应用程序中激活它们。该模型通过在主机和外接程序之间构建通信管道来实现此目的。该模型是使用: System.AddIn, System.AddIn.Hosting, System.…

CVPR‘25 | 高文字渲染精度的商品图文海报生成

本文分享阿里妈妈智能创作与AI应用团队在图文广告创意方向上提出的商品图文海报生成模型&#xff0c;通过构建字符级视觉表征作为控制信号&#xff0c;可以实现精准的图上中文逐像素生成。基于该项工作总结的论文已被 CVPR 2025录用&#xff0c;并在阿里妈妈业务场景落地&#…

Golang|抽奖相关

文章目录 抽奖核心算法生成抽奖大转盘抽奖接口实现 抽奖核心算法 我们可以根据 单商品库存量/总商品库存量 得到每个商品被抽中的概率&#xff0c;可以想象这样一条 0-1 的数轴&#xff0c;数轴上的每一段相当于一种商品&#xff0c;概率之和为1。 抽奖时&#xff0c;我们会生…

idea maven 命令后控制台乱码

首先在idea中查看maven的编码方式 执行mvn -v命令 查看编码语言是GBK C:\Users\13488>mvn -v Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: D:\maven\apache-maven-3.6.3\bin\.. Java version: 1.8.0_202, vendor: Oracle Corporation, runt…

C# dll 打包进exe

Framework4.x推荐使用 Costura.Fody 1. 安装 NuGet 包 Install-Package Costura.Fody工程自动生成packages文件夹&#xff0c;300M左右。生成FodyWeavers.xml、FodyWeavers.xsd文件。 2. 自动嵌入 编译后&#xff0c;所有依赖的 DLL 会被自动嵌入到 EXE 中。 运行时自动解压…

【数据融合实战手册·实战篇】二维赋能三维的5种高阶玩法:手把手教你用Mapmost打造智慧城市标杆案例

在当今数字化时代&#xff0c;二三维数据融合技术的重要性不言而喻。二三维数据融合通过整合二维数据的结构化优势与三维数据的直观性&#xff0c;打破了传统数据在表达和分析上的局限&#xff0c;为各行业提供了更全面、精准的数据分析手段。从智慧城市建设到工业智能制造&…

ValueError: model.embed_tokens.weight doesn‘t have any device set

ValueError: model.embed_tokens.weight doesn’t have any device set model.embed_tokens.weight 通常在深度学习框架(如 PyTorch)中使用,一般是在处理自然语言处理(NLP)任务时,用于指代模型中词嵌入层(Embedding layer)的权重参数。下面详细解释: 词嵌入层的作用 …

解决:QTcpSocket: No such file or directory

项目场景&#xff1a; 使用QTcpSocket进行网络编程&#xff1a; 调用connectToHost连接服务器&#xff0c;调用waitForConnected判断是否连接成功&#xff0c;连接信号readyRead槽函数&#xff0c;异步读取数据&#xff0c;调用waitForReadyRead,阻塞读取数据。 问题描述 找不…

支付宝商家转账到账户余额,支持多商户管理

大家好&#xff0c;我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能&#xff0c;支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号&#xff0c;即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…