PAT乙级1007
常规解法
#include <iostream>
using namespace std;// 判断一个数是否为素数的函数
bool isprime(int a) {// 遍历 2 到 sqrt(a) 之间的数,判断 a 是否能被它们整除for (int i = 2; i * i <= a; i++) {if (a % i == 0) // 如果能整除,说明 a 不是素数return false;}return true; // 如果没有找到能整除的数,说明 a 是素数
}int main() {int N, cnt = 0; // N 为输入的数字,cnt 用于统计符合条件的素数对数量cin >> N; // 输入一个正整数 N// 从 5 开始遍历到 N,因为素数对的第一位素数必须从 5 开始// 对于每一个 i,检查 i 和 i-2 是否为素数for (int i = 5; i <= N; i++) {// 检查 i 和 i-2 是否都是素数if (isprime(i - 2) && isprime(i)) {cnt++; // 如果是素数对,增加计数}}cout << cnt; // 输出符合条件的素数对的数量return 0;
}
代码解析:
1. isprime(int a):
这是一个判断一个数是否为素数的函数。它通过遍历从 2 到 sqrt(a) 的整数,检查 a 是否能被这些数整除。如果能整除,返回 false,说明 a 不是素数;如果不能整除,返回 true,说明 a 是素数。
2. main():
• 读取输入的整数 N,表示我们要检查的素数范围。
• 变量 cnt 用来统计符合“差为 2 的素数对”的个数。
• 从 5 开始遍历直到 N,因为我们只关心从 5 开始的素数对(即差为 2 的素数对的第一个素数从 5 开始)。
• 对于每个 i,检查 i 和 i-2 是否都是素数,如果是,说明它们是一个符合条件的素数对,增加计数 cnt。
• 最后输出符合条件的素数对的数量。
示例:
输入:
20
输出:
4
解释:
• 在小于等于 20 的素数中,存在以下符合条件的素数对:
• (5, 7)
• (11, 13)
• (17, 19)
• 总共 3 对符合条件,因此输出结果是 3。
优化建议:
• 时间复杂度: isprime 函数的时间复杂度是 O(sqrt(a)),所以整体代码的时间复杂度是 O(N * sqrt(N)),这对于最大 N = 100000 可能有一定的性能瓶颈。为了进一步提高性能,可以考虑使用埃拉托斯特尼筛法来预先计算素数。
素数筛选法
埃拉托斯特尼筛法(Sieve of Eratosthenes) 是一种用于计算某个范围内所有素数的高效算法。它由古希腊数学家埃拉托斯特尼提出,主要通过标记非素数来逐步筛选出素数。这个方法非常适用于寻找小范围内的所有素数,时间复杂度为 O(n log log n),其中 n 是上限。
埃拉托斯特尼筛法的基本思想:
1. 假设我们需要找出 1 到 n 之间的所有素数。
2. 首先假设所有的数字都是素数,将所有数字标记为“可能是素数”。
3. 从 2 开始,检查每个数字:
• 如果该数字被标记为素数,则从它的平方开始,将它的所有倍数标记为“非素数”。
• 继续处理下一个未标记的数字,直到所有数字处理完成。
4. 剩下标记为“素数”的数字即为所有素数。
具体步骤:
1. 创建一个布尔数组 is_prime,数组大小为 n+1,并将所有元素初始化为 true(表示所有数字都是素数)。
2. 标记 is_prime[0] 和 is_prime[1] 为 false,因为 0 和 1 不是素数。
3. 从 2 开始,检查每个数字:
• 如果 is_prime[i] 为 true,则从 i * i 开始标记 i 的所有倍数为非素数。
• 重复这个过程,直到 i * i > n。
4. 最后,所有 is_prime[i] 为 true 的位置 i 对应的数字就是素数。
示例:寻找小于等于 20 的所有素数
步骤:
1. 初始化布尔数组 is_prime[0…20]:
is_prime[0…20] = {false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true}
2. 从 2 开始,处理数字 2:
• 标记 2 的倍数:4, 6, 8, 10, 12, 14, 16, 18, 20 为非素数。
• 更新 is_prime 数组:
is_prime[0…20] = {false, false, true, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false}
3. 处理下一个未被标记的数字 3:
• 标记 3 的倍数:9, 12, 15, 18 为非素数。
• 更新 is_prime 数组:
is_prime[0…20] = {false, false, true, true, false, true, false, true, false, false, false, true, false, true, false, true, false, true, false, true, false}
4. 继续处理 5、7 等,直到所有数字处理完。
最终,is_prime 数组中标记为 true 的位置对应的数字是素数:
2, 3, 5, 7, 11, 13, 17, 19
C++ 实现:
#include
#include
using namespace std;
void sieve_of_eratosthenes(int n) {
// 创建一个布尔数组,初始化为 true,表示所有数都是素数
vector is_prime(n + 1, true);
is_prime[0] = is_prime[1] = false; // 0 和 1 不是素数
// 从 2 开始,筛选出所有的素数
for (int i = 2; i * i <= n; i++) {if (is_prime[i]) { // 如果 i 是素数for (int j = i * i; j <= n; j += i) {is_prime[j] = false; // 将 i 的倍数标记为非素数}}
}// 输出所有素数
for (int i = 2; i <= n; i++) {if (is_prime[i]) {cout << i << " ";}
}
cout << endl;
}
int main() {
int N;
cin >> N;
sieve_of_eratosthenes(N); // 输出不超过 N 的所有素数
return 0;
}
代码解释:
1. 布尔数组 is_prime: 用来标记数字是否是素数,初始化时将所有数字标记为 true。
2. 筛选过程: 从 2 开始,如果某个数是素数,则标记它的倍数为 false,直到 i * i > n。
3. 输出素数: 在所有数字处理完后,输出 is_prime 数组中标记为 true 的数字。
优点:
• 高效性: 埃拉托斯特尼筛法的时间复杂度为 O(n log log n),比简单的逐个检查每个数字是否为素数要高效得多。
• 适用于较大的 n: 即使对于较大的 n,这个算法仍然能在合理的时间内找到所有素数。
复杂度:
• 时间复杂度: O(n log log n),对于 n 范围内的素数查找非常高效。
• 空间复杂度: O(n),用于存储 is_prime 数组。
相关文章:
PAT乙级1007
常规解法 #include <iostream> using namespace std;// 判断一个数是否为素数的函数 bool isprime(int a) {// 遍历 2 到 sqrt(a) 之间的数,判断 a 是否能被它们整除for (int i 2; i * i < a; i) {if (a % i 0) // 如果能整除,说明 a 不是素…...
代码随想录刷题day52|(二叉树篇)106.从中序与后序遍历序列构造二叉树
目录 一、二叉树理论知识 二、构造二叉树思路 2.1 构造二叉树流程(给定中序后序 2.2 整体步骤 2.3 递归思路 2.4 给定前序和后序 三、相关算法题目 四、易错点 一、二叉树理论知识 详见:代码随想录刷题day34|(二叉树篇)二…...
MTK平台 Android12-Android13 默认搜狗输入法
系统默认搜狗输入法功能实现 文章目录 需求:场景 参考资料需求实现内置搜狗输入法配置第三方apk .mk 和 搜狗安装包,不可卸载方式搜狗输入法module 配置到系统device.mk 中去 设置搜狗输入法为默认输入法给输入法授权,默认所有权限 总结思考 …...
vue3实现动态路由
文章目录 一、基础信息1.路由构成2.菜单配置表3.vue-router4方法 二、实现思路1.登录获取菜单配置表2.导航守卫3.添加动态路由4.渲染菜单5.退出登录删除动态路由 三、实现代码1.路由守卫2.基础路由文件3.添加动态路由逻辑4.待特殊处理路由配置表5.404类路由6.删除动态路由 场景…...
行为型设计模式
深入理解行为型设计模式:模板方法、观察者、责任链 设计模式是软件开发中解决常见问题的经典方案,而行为型设计模式尤其关注对象之间的职责分配与通信方式。本文将详细讲解模板方法模式、观察者模式和责任链模式。 一、模板方法模式(Templat…...
【服务器环境安装指南-指定 cuda 版本】在 Ubuntu 22.04 上完成 cuda-toolkit 12.0 和 cudnn 12.x 的安装教程
0.引言 在深度学习和高性能计算领域,CUDA 和 cuDNN 是不可或缺的工具。为充分发挥硬件性能,我们需要在服务器环境中正确配置这些工具。然而,安装过程中可能会遇到诸多挑战,例如版本兼容性和环境变量设置等问题。本篇文章将以 Ubu…...
蓝桥杯第十届 数的分解
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个…...
二叉搜索树
目录 概念 代码实现 成员 基本结构 查找 插入 删除 中序遍历 拷贝构造 赋值运算符重载 析构函数 递归实现 递归实现查找 递归实现插入 递归实现删除 概念 关于二叉树的基本结构已经进行过详细剖析,本篇博客将对一种特殊的二叉树进行分析。 二叉树&…...
Linux多线程详解
Linux多线程详解 一、Linux多线程概念1.1 什么是线程1.2 进程和线程1.3 进程的多个线程共享1.4 进程和线程的关系 二、Linux线程控制2.1 POSIX线程库2.2 线程创建2.3 获取线程ID pthread_self2.4 线程等待pthread_join2.5 线程终止2.6 线程栈 && pthread_t2.7 线程的局…...
攻防世界-web-1
Training-WWW-Robots 在URL后面加上/robots.txt 直接在URL后面添加/fl0g.php PHP2 他问我能不能登录这个网站,又因为考察php内容,在URL后面添加/index.php,无任何回显 试试/index.phps 分析一下代码,发现要用get方式上传idadmin,…...
笔记本+移动端维修全套教程
今天分享的是笔记本移动端维修全套教程(免费视频资料大全) 当自己手机或者电脑坏了,很多人都会想着去维修店铺修,但价格不透明,容易被坑,当自己了解一些之后,即使不会修,也可以对手…...
【STM32】知识点介绍二:GPIO引脚介绍
文章目录 一、概述二、GPIO的工作模式三、寄存器编程 一、概述 GPIO(英语:General-purpose input/output),即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、…...
【STM32】GPIO
目录 1、什么是GPIO2、什么是GPIO组3、GPIO的基本结构4、GPIO位结构5、GPIO八种工作模式6、GPIO相关寄存器1. 端口配置低寄存器GPIO[x]_CRL和端口配置高寄存器GPIO[x]_CRH, Config Register High和Config Register Low)2. 端口输入数据寄存器(GPIO[x]_IDR)3. 端口输出数据寄存器…...
鸿蒙移动应用开发--UI组件布局
实验要求: 制作一个B站视频卡片界面,大致如下图所示,要求应用到线性布局、层叠布局等相关课堂知识。背景图、logo及文本内容不限。 实验环境 :DevEco Studio 实验过程: 步骤1:创建项目 1. 在您的开发环境…...
[MySQL]MySQL数据库基础知识与操作
MySQL基础知识 为什么要有数据库? 文件存储的缺点 1.没有以某种特定的数据格式存储数据,查找不方便,只能遍历2.安全性:数据误操作后不能回滚3.每次操作数据都要用户自己操作4.数据量大的时候,操作的成本很高 创建一…...
卡诺图化简法的原理
引子 若两个最小项只有一个因子不同,则称这两个最小项具有相邻性。 例如, A ′ B C ′ ABC A′BC′和 A B C ABC ABC两个最小项仅第一个因子不同,所以它们具有相邻性。这两个最小项相加时定能合并成一项并将一对不同的因子消去 A ′ B C ′…...
从零开始:使用Luatools工具高效烧录Air780EPM核心板项目的完整指南
本文将深入讲解如何使用Luatools工具烧录一个具体的项目到Air780EPM开发板中。如何使用官方推荐的Luatools工具(一款跨平台、命令行驱动的烧录利器),通过“环境配置→硬件连接→参数设置→一键烧录”四大步骤,帮助用户实现Air780E…...
探秘Transformer系列之(18)--- FlashAttention
探秘Transformer系列之(18)— FlashAttention 文章目录 0x00 概述0.1 问题0.2 其它解决方案0.3 Flash Attention 0x01 背景知识1.1 GPU相关概念硬件概念运行单元内存 软件概念运行模式线程模型Grid & DeviceBlock & SMThread & SPThread &am…...
VUE2导出el-table数据为excel并且按字段分多个sheet
首先在根目录下建一个文件夹export用来存储export.js import * as XLSX from xlsxfunction autoWidthFunc(ws, data) {// 设置每列的最大宽度const colWidth data.map(row > row.map(val > {var reg new RegExp([\\u4E00-\\u9FFF], g) // 检测字符串是否包含汉字if (v…...
Android面试总结之Android RecyclerView:从基础机制到缓存优化
引言 在 Android 开发中,RecyclerView是高效展示列表数据的核心组件。其强大的性能源于独特的视图复用机制和四级缓存体系。本文将结合源码与示例,带你深入理解RecyclerView的工作原理与优化策略。 核心组件 RecyclerView:作为容器视图&am…...
【C#语言】C#文件操作实战:动态路径处理与安全写入
文章目录 ⭐前言⭐一、场景痛点⭐二、完整实现代码⭐三、关键技术解析🌟1、动态路径处理🌟2、智能目录创建🌟3、安全的文件写入 ⭐四、进阶扩展方案🌟1、用户自定义路径选择🌟2、异常处理增强🌟3、异步写入…...
react中 useEffect和useLayoutEffect的区别
useEffect 和 useLayoutEffect 都是 React 中用于处理副作用的 Hook,但它们在执行时机和用途上有一些关键区别。理解这些区别可以帮助你更好地选择适合的 Hook 来实现特定的功能。 1. 执行时机 useEffect: 异步执行:useEffect 是在组件渲染完…...
TDengine 中的系统信息统计
简介 TDengine 3.0 版本开始提供一个内置数据库 performance_schema,Performance_Schema 数据库中存储了系统中的各种统计信息,包括存储及性能有关统计数据。本节详细介绍其中的表和表结构。 PERF_APP 提供接入集群的应用(客户端ÿ…...
C++可变参数
可变参数C风格的可变参数C风格可变参数的使用 C11可变参数模板递归展开参数包参数列表展开折叠表达式 STL中的emplace插入接口 可变参数 C风格的可变参数 可变参数是一种语言特性,可以在函数声明中使用省略号...来表示函数接受可变数量的参数。 例如典型的printf…...
建造者模式 (Builder Pattern)
建造者模式 (Builder Pattern) 是一种创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 一、基础 1.1 意图 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 1.2 适用场景 当创建复杂对象的算法应该…...
Thales靶机攻略
1.下载导入VBox,并启动靶机 靶机地址:https://download.vulnhub.com/thales/Thales.zip 解压后,在VBox中导入虚拟电脑。包含所有网卡的MAC地址。 导入完成,设置网卡模式为仅主机网络。开启靶机。 kali网卡更改为桥接模式。点击工…...
【redis】哨兵:搭建主从/哨兵节点详解和细节
文章目录 编排步骤搭建主从节点创建容器启动容器 搭建哨兵节点创建容器哨兵节点配置文件配置节点启动容器 主从/哨兵节点连入同一个局域网 编排步骤 分为两组 yml,先后启动 我们其实也可以用于一个 yml 文件,直接启动 6 个容器,但是&#x…...
零基础上手Python数据分析 (9):DataFrame 数据读取与写入 - 让数据自由穿梭
回顾一下,上篇博客我们学习了 Pandas 的核心数据结构 Series 和 DataFrame。 DataFrame 作为 Pandas 的 “王牌” 数据结构,是进行数据分析的基石。 但 DataFrame 的强大功能,还需要建立在 数据输入 (Input) 和 数据输出 (Output) 的基础上。 数据从哪里来? 分析结果又如何…...
Emacs 折腾日记(十九)——配置输入法和vim操作方式
上一篇文章中,我们将Emacs变得稍微好看了点。换成了自己喜欢的主题和颜色,这样每天用起来也比较养眼,不会特别排斥。本篇文章的主要任务就是配置输入法方便输入中文以及将vim的操作模式搬到Emacs中。进一步提到Emacs的可用性 配置中文输入法…...
Docker 镜像构建与优化
一、Dockerfile 构建镜像 1.1.拉取所需镜像 首先 docker pull 拉取一个 centos7 的镜像。 docker pull centos:7 下载 nginx 源码包。 官网:nginx: download wget https://nginx.org/download/nginx-1.26.3.tar.gz 1.2.解决 CentOS 7 安装源问题 因为原本的 …...
Mininet--moduledeps.py源码解析
整体构架概述 1. What is it moduledeps.py是Mininet网络模拟框架的模块依赖管理工具,用于动态管理Linux内核模块(如Open vSwitch、TUN/TAP)和验证系统环境。其核心目的是确保Mininet运行所需的底层模块和可执行文件已正确加载或存在&#…...
JAVA EE_多线程-初阶(一)
1.认识线程 1.1概念 1)线程是什么 线程是在进程内部中进行运行的,可以把它想成一个“执行流“,每个线程负责执行线程内的部分代码,多个线程之间可以”同时“执行多个代码。 “同时”:指并行,采用分时复用…...
批量优化与压缩 PPT,减少 PPT 文件的大小
我们经常能够看到有些 PPT 文档明明没有多少内容,但是却占用了很大的空间,存储和传输非常的不方便,这时候通常是因为我们插入了一些图片/字体等资源文件,这些都可能会导致我们的 PPT 文档变得非常的庞大,今天就给大家介…...
AI 的“幻觉”现象:深入解析 Hallucination 的成因与应对之道
文章目录 一、啥是 AI 的 Hallucination?二、啥时候容易出现幻觉?1. 知识边界之外的问题2. 模糊或不明确的输入3. 生成长篇内容4. 多模态任务中的误解5. 过度自信的语气要求 三、幻觉为啥会出现?原理是啥?1. 概率预测的本质2. 训练…...
加载huggingface数据集报token无效错误解决方案
加载huggingface数据集报错 import pandas as pddf pd.read_json("hf://datasets/udell-lab/NLP4LP/data/test.jsonl", linesTrue) print(df)PS C:\Users\pengkangzhen\PythonProjects\llm-ecr> & C:/Users/pengkangzhen/.conda/envs/py3.12_ml/python.exe …...
Java面试题及知识点Day1
自动拆箱和自动装箱 装箱就是自动将基本数据类型转换为包装器类型 拆箱就是自动将包装其类型转化为基本数据类型 重写和重载 重写 1.发生在子类和父类之间 2.参数的方法名,参数,返回值,必须相同 3.权限修饰符不能小于重写方法的权限修饰符…...
【动态规划】-- 三步问题(easy)
文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 三步问题。有个小孩正在上楼梯,楼梯有 n 阶台阶,小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模 1000000007。…...
字符流Reader/Writer
一、Reader相关介绍及其子类 Reader是所有字符输入流的超类。它提供了读取字符流的基本方法,如read(), read(char[] cbuf, int off, int len)等;由于Reader是抽象类,通常使用它的子类如FileReader, BufferedReader等来创建字符输入流对象。 …...
字符串交替合并问题
问题: 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 1: 输入:w…...
shell脚本一键安装docker+docker-compose,支持x86_64、arm64双架构
目录 脚本内容 运行效果 安装包和脚本 脚本内容 [roottest1 docker]# cat install.sh #!/bin/bash set -e export pathpwd export docker_data"/data/docker_data"function check_arch() {if [ -f /etc/redhat-release ]; thenOS"RedHat"elif [ -f /e…...
Elasticsearch 面试备战指南
Elasticsearch 面试备战指南 一、基础概念 什么是Elasticsearch? Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,提供近实时搜索、高可用性和水平扩展能力。常用于日志分析(ELK)、全文检索、商业智能等场景。 Elasticsea…...
新手村:逻辑回归-理解04:熵是什么?
新手村:逻辑回归04:熵是什么? 熵是什么? 前置条件 在开始学习逻辑回归中的熵理论之前,需要掌握以下基础知识: 概率论与统计学: 概率分布(如伯努利分布、正态分布)。条件概率和贝叶斯定理。期…...
Javaweb后端登录会话技术jwt令牌
jwt生成与校验 是base4补位的 最后面是签名,签名不是base64,是通过签名算法加密后来的 令牌长度不是固定的,长度取决于原始内容,载荷,大小 头有,类型,签名算法 base64可以对任意的二进制数据进…...
图像对比分析并生成报告
pip install pyautogui """ 图像对比分析工具 功能:实现像素级差异、结构相似性(SSIM)、直方图相似度和特征匹配率四种对比方法 作者:智能助手 版本:1.2 日期:2025-02-27""" import os import cv2 …...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vue 基础行拖拽排序示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vu…...
vue-如何将组件内容作为图片生成-html2canvas
1.引入必要的库 这里呢我们使用 html2canvas 库来将 HTML 元素转换为画布(canvas),然后再将其导出为图片。首先,确保在项目中安装了 html2canvas: npm install html2canvas 2. 组件结构 然后在我们的vue文件里面&a…...
单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结
RAM 与 内存 RAM(Random Access Memory,随机存取存储器) 和 内存 这两个术语通常是 同义词,即 内存 常常指的就是 RAM。 1. RAM(内存) 定义:RAM 是计算机中的 主存储器,用于临时存…...
Linux 练习一 NFS和DNS
练习四 任务需求:客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容为:Very good, you have successfully set up the system. 各个主机能够实现时间同步&#…...
aab 转 apk
googleplay发布的游戏对外前,测试同学要安装到手机上先行测试,所以就有了这个需求。网上找了一篇文章讲的很详细了,文档是英语的,这里摘抄重要的部分做下记录: https://www.geekdashboard.com/extract-apk-files-from…...
JAVA开发:实例成员与静态成员
判断Java中的实例成员与静态成员 在Java中,可以通过以下几种方式判断一个成员是实例成员还是静态成员: 1. 通过声明方式判断 静态成员使用static关键字修饰,实例成员不使用: public class MyClass {// 实例成员int instanceVa…...