NO.19十六届蓝桥杯模拟赛第三期上

1

如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。
请问, 2024 的最大的质因数是多少?
答:23


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定义一个整数变量n,并将其初始值设为2024int n = 2024;//定义一个整数类型的向量f,用于存储n的质因数vector<int> f;//从2开始遍历到sqrt(n),因为一个数的质因数不会超过它的平方根for (int i = 2; i * i <= n; i++) {//如果n能被i整除,说明i是n的一个质因数while (n % i == 0) {//将n除以i,继续寻找n的其他质因数n /= i;//将找到的质因数i存入向量f中f.push_back(i);}}//如果经过上述步骤后,n仍然大于1,说明n本身是一个质数,将其存入向量f中if (n > 1) {f.push_back(n);}//对向量f进行升序排序sort(f.begin(), f.end());//将最大质因数输出到标准输出,并换行。cout << f.back() << '\n';//表示程序正常结束return 0;
}
  • #include <bits/stdc++.h>:这是一个非标准的头文件,它包含了几乎所有标准库的头文件,使用它可以避免分别包含多个头文件。
  • using namespace std;:使用标准命名空间,这样在代码中就可以直接使用标准库中的类和函数,而无需加上 std:: 前缀。
  • ios::sync_with_stdio(false);:关闭 C++ 标准输入输出流与 C 标准输入输出流的同步,这样可以提高输入输出的效率。
  • cin.tie(nullptr);:解除 cin 和 cout 的绑定,进一步提高输入输出的效率。
  • sort 是 C++ 标准库提供的一个强大的排序工具,在默认情况下它会按照升序对指定范围内的元素进行排序。
  • f.begin():这是向量 f 的起始迭代器,它指向向量的第一个元素。迭代器可以理解为一种特殊的指针,用于遍历容器中的元素。
  • f.end():这是向量 f 的末尾迭代器,它指向向量最后一个元素的下一个位置。
质因数分解的基本原理

质因数分解是将一个合数表示为若干个质数相乘的形式。例如,对于数字 12,它可以分解为2×2×3,其中2和3都是质数。在进行质因数分解时,我们需要从最小的质数2开始,依次检查每个数是否是原数的因数。如果是,则将其作为一个质因数记录下来,并将原数除以这个质因数,得到一个新的数,然后继续对新的数进行分解,直到新的数为1为止

2

对于两个整数a, b,既是a的整数倍又是b的整数倍的数称为a和b的公倍数。公倍数中最小的正整数称为a和b的最小公倍数。
请问,2024和1024的最小公倍数是多少?
答:259072


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定义两个整数变量n和m,并分别初始化为2024和1024int n = 2024, m = 1024;cout << n / __gcd(n, m) * m << '\n';return 0;
}
  • __gcd(n, m):这是 GCC 编译器提供的一个内置函数,用于计算 n 和 m 的最大公约数。在其他编译器中,也可以使用 <numeric> 头文件中的 std::gcd 函数来实现相同的功能。
  • n / __gcd(n, m) * m:根据最大公约数和最小公倍数的关系:
    L C M ( n , m ) = n × m G C D ( n , m ) LCM(n,m)=\frac{n \times m}{GCD(n,m)} LCM(n,m)=GCD(n,m)n×m
    这里先将 n 除以 GCD(n, m),再乘以 m,可以避免在计算  时可能出现的整数溢出问题。
#include <iostream>
#include <numeric>int main() {int n = 2024, m = 1024;std::cout << n / std::gcd(n, m) * m << '\n';return 0;
}
gcd最大公约数和 lcm最小公倍数

最大公约数GCD
最大公约数指的是两个或多个整数共有约数中最大的一个。

最小公倍数LCM
最小公倍数是指两个或多个整数公有的倍数中最小的一个。

3

如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。
请问, 2024 的所有质因数的和是多少?
答:40


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n = 2024;vector<int> f;for (int i = 2; i * i <= n; i++) {while (n % i == 0) {n /= i;f.push_back(i);}}if (n > 1) {f.push_back(n);}sort(f.begin(), f.end());//定义一个整数变量sum,用于存储质因数的和,初始值为0int sum = 0;//使用范围for循环遍历向量f中的每个元素for (auto x : f) {//将每个质因数累加到sum中sum += x;}cout << sum << '\n';return 0;
}
范围for
for (declaration : range) {// 循环体
}
  • declaration:用于声明一个变量,该变量将在每次循环迭代时依次绑定到 range 中的每个元素。
  • range:表示要遍历的对象,可以是数组、容器、初始化列表等可迭代对象。
  • 循环体:每次迭代时执行的代码块。

4

请问,在不超过 2024 的数中,最大的质数是多少?
答:2017


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//递减循环,从2024开始,每次循环将i的值减1,直到找到质数为止for (int i = 2024;; i--) {//布尔变量flg,初始值为true,用于标记当前的i是否为质数bool flg = true;//将i的值赋给临时变量t,避免在后续的判断过程中修改i的值int t = i;//从2开始遍历到,因为一个数的因数不会超过它的平方根for (int j = 2; j * j <= t; j++) {//如果t能被j整除,说明t不是质数,将flg置为false,并使用break语句跳出内层循环if (t % j == 0) {flg = false;break;}}//如果flg仍然为true,说明i是质数,将其输出到标准输出,并使用break语句跳出外层循环,结束程序if (flg) {cout << i << '\n';break;}}return 0;
}

5

如果两个整数 a, b 除了 1 以外,没有其它的公约数,则称整数 a 与 b 互质。
请问,与 2024 互质的数中(包括1),第 2024 小的数是多少?
答:4655


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n = 2024;//定义一个整数变量cnt,用于记录与n互质的数的个数,初始值为0int cnt = 0;//这是一个无限循环,从1开始逐个检查整数ifor (int i = 1;; i++) {//使用__gcd函数计算i和n的最大公约数,如果最大公约数为1,则说明i和n互质if (__gcd(i, n) == 1) {//如果i与n互质,则将计数器cnt加1if (++cnt == 2024) {//当cnt达到2024,找到了第2024个与n互质的数,将其输出并使用break语句跳出循环cout << i << '\n';break;}}}return 0;
}

6

对于字符串 S=ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN ,请找到S的一个长度不超过10的子串 A,使得(A的长度)乘以(A在S中出现的次数)最大。
请问这个子串是什么?(如果有多个满足条件的,请回答字典序最小的)。
答:NQN


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定义一个字符串s,并初始化为给定的字符串string s = "ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN";//获取字符串s的长度int n = s.size();//用于存储最终结果的子串,初始为空string ans;//用于存储最大的长度乘以出现次数的乘积,初始值为0int mx = 0;//外层循环枚举子串的长度,从1到10for (int len = 1; len <= 10; len++) {//内层循环枚举子串的起始位置,确保子串不会超出原字符串的范围for (int i = 0; i + len - 1 < n; i++) {//使用substr函数提取从位置i开始、长度为len的子串string subs = s.substr(i, len);//用于记录子串subs在原字符串中出现的次数,初始值为0int cnt = 0;//遍历原字符串,检查每个长度为len的子串是否与subs相等for (int j = 0; j + len - 1 < n; j++) {//如果相等,则将计数器cnt加1if (s.substr(j, len) == subs) {cnt += 1;}}//如果当前子串的长度乘以出现次数的乘积大于之前记录的最大乘积,则更新最大乘积mx和结果子串ansif (len * cnt > mx) {mx = len * cnt;ans = subs;//如果乘积相等,但当前子串的字典序更小,则更新结果子串ans。} else if (len * cnt == mx && subs < ans) {ans = subs;}}}cout << ans << '\n';return 0;
}
for (int i = 0; i + len - 1 < n; i++)
  • 初始化int i = 0,定义一个整型变量 i 并将其初始值设为 0。i 表示子串在原字符串中的起始位置。
  • 循环条件i + len - 1 < n,这是决定循环是否继续执行的条件。len 是当前正在考虑的子串的长度,n 是原字符串的长度。i + len - 1 表示子串的结束位置(因为数组下标从 0 开始)。这个条件确保子串不会超出原字符串的范围。
  • 迭代语句i++,每次循环结束后,将 i 的值加 1,这样就可以依次尝试原字符串中不同位置作为子串的起始位置。

7

如果一个字符串中只包含字符0和字符1,则称为一个01串(包含全为0的串和全为1的串)。
请问有多少个长度为24的01串,满足任意5个连续的位置中不超过3个位置的值为1。


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定义一个整数变量n,并将其初始值设为24int n = 24;//使用位运算'1 << 24'计算的值,并将其输出到标准输出,然后换行cout << (1 << 24) << '\n';//定义一个整数变量ans,用于记录满足条件的二进制序列的数量,初始值为0int ans = 0;//使用位运算'1 << n'计算2^n的值,该循环会遍历从0到2^n-1的所有整数,每个整数可以看作一个长度为n的二进制序列for (int i = 0; i < 1 << n; i++) {//定义一个长度为2的数组cnt,用于统计0和1的个数,初始值都为0int cnt[2] {};//遍历二进制序列的前5位for (int j = 0; j < 5; j++) { // 0 .. 4//使用位运算`i >> j & 1`提取二进制序列中第`j`位的值(0 或 1),并将对应的计数器加1cnt[i >> j & 1] += 1;}//如果前5位中1的个数超过3个,则跳过当前二进制序列,继续检查下一个序列if (cnt[1] > 3) {continue;}//定义一个布尔变量ok,用于标记当前二进制序列是否满足条件,初始值为truebool ok = true;//从第5位开始,依次检查后续连续5位中1的个数for (int j = 5; j < n; j++) {//移除当前连续5位中最左边的一位,并将对应的计数器减1cnt[i >> (j - 5) & 1] -= 1;//添加当前连续5位中最右边的一位,并将对应的计数器加1cnt[i >> j & 1] += 1;//如果当前连续5位中1的个数超过3个,则将ok设为false,并跳出循环if (cnt[1] > 3) {ok = false;break;}}//如果ok为false,说明当前序列不满足条件,跳过该序列,继续检查下一个序列if (!ok) {continue;//如果ok为true,说明当前二进制序列满足条件,将ans加1} else {ans += 1;}}cout << ans << '\n';return 0;
}

1 << 24
位运算就是直接对整数的二进制位进行操作。<< 是左移运算符,它会将一个数的二进制表示向左移动指定的位数。
数字 1 的二进制表示是 0000 0000 0000 0000 0000 0000 0000 0001
移动后的二进制结果是 0001 0000 0000 0000 0000 0000 0000 0000

i >> j 是 C++ 中的右移运算符表达式
右移运算符>> 是右移运算符,用于将一个整数的二进制表示向右移动指定的位数
对于表达式 i >> j,它会把整数 i 的二进制形式向右移动 j 位。

& 1 通常用于提取一个整数二进制表示的最低位(即最右边的一位)。因为数字 1 的二进制表示在不同位数系统下,都是除了最低位为 1 其余位为 0
当一个整数与 1 进行按位与操作时,其他位都会因为和 0 进行按位与而变为 0,只有最低位会根据其自身的值(0 或 1)决定结果。如果最低位是 0,那么结果就是 0;如果最低位是 1,那么结果就是 1。

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

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

相关文章

Linux网络_应用层自定义协议与序列化_守护进程

一.协议 协议是一种 "约定". socket api 的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接 收的. 如果我们要传输一些 "结构化的数据" 怎么办呢? 其实&#xff0c;协议就是双方约定好的结构化的数据 像下面&#xff0c;两端都知道数据结构…

SQL命令详解之多表查询(连接查询)

目录 1 简介 2 内连接查询 2.1 内连接语法 2.2 内连接练习 3 外连接查询 3.1 外连接语法 3.2 外连接练习 4 总结 1 简介 连接的本质就是把各个表中的记录都取出来依次匹配的组合加入结果集并返回给用户。我们把 t1 和 t2 两个表连接起来的过程如下图所示&#xff1a; …

001-码云操作

码云操作 一、配置公钥1.官网地址1.进入 git bash2.查看生成的公钥3.设置到 Gitee4.测试 二、初始化一个项目1.新建仓库 一、配置公钥 方便后续提交代码不用填写密码 1.官网地址 官网地址&#xff1a;https://gitee.com/Git码云教程&#xff1a;https://gitee.com/help/arti…

30.[前端开发-JavaScript基础]Day07-数组Array-高阶函数-日期Date-DOM

JavaScript的DOM操作 &#xff08;一&#xff09; 1 什么是DOM&#xff1f; 认识DOM和BOM 深入理解DOM 2 认识DOM Tree DOM Tree的理解 3 DOM的整体结构 DOM的学习顺序 DOM的继承关系图 document对象 4 节点、元素导航 节点&#xff08;Node&#xff09;之间的导航&…

【自学笔记】Spring基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Spring 基础知识点总览1. Spring 框架简介2. IoC&#xff08;控制反转&#xff09;与 DI&#xff08;依赖注入&#xff09;2.1 IoC 容器2.2 依赖注入方式示例代码&a…

WordPress多语言插件GTranslate

GTranslate是一个免费的WordPress多语言插件&#xff0c;它允许您将网站内容翻译成多种语言。这个插件提供了一个简单易用的界面&#xff0c;让您可以在WordPress后台直接进行翻译操作。以下是GTranslate插件的一些主要特点&#xff1a; 免费使用&#xff1a;GTranslate插件完…

数列极限入门习题

数列极限入门习题 lim ⁡ n → ∞ ( 1 1 2 1 3 ⋯ 1 n ) 1 n \lim\limits_{n\rightarrow\infty}(1 \frac{1}{2}\frac{1}{3}\cdots\frac{1}{n})^{\frac{1}{n}} n→∞lim​(121​31​⋯n1​)n1​ lim ⁡ n → ∞ ( 1 n 1 1 n 2 ⋯ 1 n n ) \lim\limits_{n\rightarrow\…

嵌入式学习前要了解的基础知识

一、电压和电流 在嵌入式开发中&#xff0c;电压和电流是两个基本的电气概念&#xff0c;对于理解和设计电子电路至关重要。它们直接影响到嵌入式系统的性能、功耗、可靠性和安全性。 电压&#xff08;Voltage&#xff09; 电压是电场力推动电荷移动的能力&#xff0c;通常以…

机器学习:强化学习的epsilon贪心算法

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种机器学习方法&#xff0c;旨在通过与环境交互&#xff0c;使智能体&#xff08;Agent&#xff09;学习如何采取最优行动&#xff0c;以最大化某种累积奖励。它与监督学习和无监督学习不同&#xff0c;强调试错…

Spring学习笔记03——Spring Boot的文件结构

Spring boot常见的文件结构&#xff1a; src/ ├── main/ │ ├── java/ │ │ └── com.example.demo/ │ │ ├── DemoApplication.java # 主入口 │ │ ├── config/ # 配置类 │ │ ├── controller/ …

谈谈 HTTPS 的工作原理,SSL / TLS 握手流程是什么?

一、HTTPS 核心机制&#xff1a;非对称加密 对称加密 HTTPS HTTP over TLS/SSL&#xff0c;通过 ​混合加密体系​ 解决三大问题&#xff1a; ​防窃听​ - 对称加密传输内容&#xff08;如 AES&#xff09;​防篡改​ - 数字签名验证数据完整性​防冒充​ - 数字证书验证服…

共轭梯度法笔记

一、梯度下降法 x k 1 x k − α ∇ f ( x k ) x_{k1} x_k - \alpha \nabla f(x_k) xk1​xk​−α∇f(xk​) 这是普通的梯度下降公式&#xff0c;有两个量是关键&#xff0c;步长 α \alpha α和方向 ∇ f ( x k ) \nabla f(x_k) ∇f(xk​)。这里的方向直接选择了梯度方向&…

ubuntu 启动不起来,光标闪烁 解决方法

ubuntu 启动不起来&#xff0c;光标闪烁 进不了系统&#xff0c;解决方法 按ctrl alt f2&#xff0c;进入终端&#xff0c;登录。 jounal -b 查看启动日志。 发现是找不到显卡驱动程序。 解决方法&#xff1a; 卸载nvidia程序。 sudo systemctl stop gdm # 适用于GNOME…

CSS - 妙用Sass

官方文档&#xff1a;https://www.sass.hk/docs/ 1.例1&#xff1a; each $theme in $themeList {$themeKey: map-get($theme, key);media screen and (weex-theme: $themeKey) {.btnText {max-width: 150px;include font(map-get($theme, medFont),map-get($theme, subFontS…

chromadb向量数据库使用 (2)

目录 代码代码解释**1. 导入 chatGLM 嵌入函数****2. 创建 ChromaDB 客户端和集合****3. 查询集合中的数据数量****4. 添加数据到集合****5. 获取已存储的文档****6. 更新文档****7. 再次获取数据&#xff0c;验证更新结果****8. 删除某个文档****9. 获取已删除的文档****总结*…

我的世界1.20.1forge模组开发进阶物品(7)——具有动画、3D立体效果的物品

基础的物品大家都会做了对吧?包括武器的释放技能,这次来点难度,让物品的贴图呈现动画效果和扔出后显示3D立体效果,这个3D立体效果需要先学习blockbench,学习如何制作贴图。 Blockbench Blockbench是一个用于创建和编辑三维模型的免费软件,特别适用于Minecraft模型的设计…

大模型在败血症预测及围手术期管理中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、败血症概述 2.1 定义与流行病学 2.2 病因与发病机制 2.3 临床表现与诊断标准 2.4 并发症与危害 三、大模型技术原理及在医疗领域的应用 3.1 大模型技术概述 3.2 大模型在医疗领…

SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析

引言&#xff1a;接口测试的必要性 在微服务架构盛行的今天&#xff0c;SpringBoot项目的接口质量直接影响着系统稳定性。本文将分享如何通过自动化工具链实现接口的功能验证与性能压测&#xff0c;使用OpenAPI规范打通测试全流程&#xff0c;让您的接口质量保障体系更加完备。…

微软具身智能感知交互多面手!Magma:基于基础模型的多模态AI智能体

作者&#xff1a; Jianwei Yang, Reuben Tan, Qianhui Wu, Ruijie Zheng, Baolin Peng, Yongyuan Liang, Yu Gu, MuCai, SeonghyeonYe, JoelJang, Yuquan Deng, Lars Liden, Jianfeng Gao 单位&#xff1a;微软研究院&#xff0c;马里兰大学&#xff0c;威斯康星大学麦迪逊分校…

Linux中jdk-8u291-linux-x64 中jdk工具包

jdk-8u291-linux-x64 指的是适用于 64 位 Linux 系统的 Java 开发工具包&#xff08;JDK&#xff09;8 更新 291 版本。这是 JDK 的一个特定版本&#xff0c;用于开发 Java 应用程序和小程序。 jdk-8u291-linux-x64 网盘下载链接&#xff1a;夸克网盘分享