蓝桥杯 — — 纯质数

news2024/12/26 23:12:28

纯质数

题目:

在这里插入图片描述

思路:

一个最简单的思路就是枚举出所有的质数,然后再判断这个质数是否是一个纯质数。

  1. 枚举出所有的质数:

    可以使用常规的暴力求解法,其时间复杂度为( O ( N N ) O(N\sqrt{N}) O(NN )),而埃氏筛法的时间复杂度为( O ( N log ⁡ log ⁡ n ) O(N \log \log n) O(Nloglogn)),如果需要判断单个数是否为素数,试除法是更合适的选择;而如果需要求解一定范围内的素数,则埃拉托斯特尼筛法效率更高。这里我们使用埃氏筛法求解给定范围内的所有素数。

  2. 判断纯质数:

    一个直接的思路是,遍历质数的每一位,判断该位置上的数是否为质数,因为对于每一位,如果是质数的话,那么这些数是固定的,即:2 3 5 7,我们可以将其写入到一个哈希表中,可以使用map库进行存储(map的查询操作的时间复杂度为( O ( log ⁡ N ) O(\log N) O(logN))),也可以自定义一个哈希数组进行查找(哈希查找的时间复杂度为( O ( 1 ) O(1) O(1)))

埃氏筛法:对一个给定的范围,求其中的质数,我们从2开始进行遍历,遍历到的每一个数,如果是质数,我们都将其进行添加到数组中,接着对数组中已经记录的所有质数进行乘积,如果得到的结果小于给定的范围,那么就标记这个值为合数,继续遍历下一个数,直到边界时停止。


例子:如果我们要求20以内的所有质数,我们首先设定一个标记数组cnt[20],并令其初值都为0,表示目前的所有数都是一个质数,然后从2开始进行遍历,首先判断2是否是一个质数,可以知道2是一个质数,将2添加到质数数组ans中,然后遍历结果数组,得到2 * 2 = 4 < 20,标记4为一个合数(即:令cnt[4] = 1),接着进入下一个循环,判断3是一个质数,将3添加到ans中,遍历ans3 * 2 = 6 < 20,标记6为一个合数,3 * 3 = 9 < 20,标记9为一个合数,进入下一个循环,判断4不是一个质数,直接进行遍历ans数组,2 * 4 = 8 < 203 * 4 = 12 < 204 * 4 = 16 < 20,分别将8,12,16进行标记,表示这些数是一个合数。依次类推知道遍历到最后即可得到所有的质数了(ans数组中记录的即是所有的质数)

GPT的一个解释:

在这里插入图片描述

代码:

  1. 使用map进行判断是否是纯质数
// 纯质数
#include<iostream>
#include<vector>
#include<map>
#include<string>
using namespace std;
//为了方便找到纯质数,我们需要一个映射 

vector<int> primeNumbers(int lb, int rb){
	vector<int> PN;
	// 定义一个数组,用于标记是否是一个质数
	vector<int> cnt(rb + 10, 0);  // 初始的值设定为0,表示都为质数 
	for(int i = 2;i <= rb;i ++){
		if(!cnt[i]){  // 如果是质数就进行标记,并且添加到数组中
			PN.push_back(i);
			cnt[i] = 1; 
		}
		// 标记出不是质数的数
		for(auto v : PN){
			if(v * i > rb) break;
			cnt[v * i] = 1;  // 首先要判断是否越界
		}
	}
	// 最后得到一个质数的数组PN
	return PN; 
}

// 判单纯质数
map<int, int> smallPrimeNumber = {{2, 1}, {3, 1}, {5, 1}, {7, 1}};
bool purePrimeNumber(int num){
	int temp;
	while(num){
		temp = num % 10;
		if(smallPrimeNumber.find(temp) ==  smallPrimeNumber.end()) return 0;
		num /= 10;
	}
	return 1;
} 
void solve(){
	// leads:首先找到所有的质数,然后再进行寻找所有的纯质数
	const int lb = 1;
	const int rb = 20210605;
	int ans = 0;
	vector<int> ansPN = primeNumbers(lb, rb);
	
	for(auto v : ansPN){
		if(purePrimeNumber(v)) ans++;
	}
	cout<<ans<<endl;
	return ;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t = 1;
	while(t--){
		solve();
	}	
	return 0;
}

在这里插入图片描述

  1. 使用一个哈希表判断是否是纯质数
// 纯质数
#include<iostream>
#include<vector>
#include<map>
#include<string>
using namespace std;
//为了方便找到纯质数,我们需要一个映射 
map<int, bool> PPNM; 

vector<int> primeNumbers(int lb, int rb){
	vector<int> PN;
	// 定义一个数组,用于标记是否是一个质数
	vector<int> cnt(rb + 10, 0);  // 初始的值设定为0,表示都为质数 
	for(int i = 2;i <= rb;i ++){
		if(!cnt[i]){  // 如果是质数就进行标记,并且添加到数组中
			PN.push_back(i);
			cnt[i] = 1; 
		}
		// 标记出不是质数的数
		for(auto v : PN){
			if(v * i > rb) break;
			cnt[v * i] = 1;  // 首先要判断是否越界
		}
	}
	// 最后得到一个质数的数组PN
	return PN; 
}

// 判单纯质数
int hashMap[10] = {0, 0, 1, 1, 0, 1, 0 ,1 ,0 ,0};
bool purePrimeNumber(int num){
	int temp;
	while(num){
		temp = num % 10;
		num /= 10;
		if(!hashMap[temp]) return false;
	}
	return true;
}

void solve(){
	// leads:首先找到所有的质数,然后再进行寻找所有的纯质数
	const int lb = 1;
	const int rb = 20210605;
	int ans = 0;
	vector<int> ansPN = primeNumbers(lb, rb);
	
	for(auto v : ansPN){
		if(purePrimeNumber(v)) ans++;
	}
	cout<<ans<<endl;
	return ;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t = 1;
	while(t--){
		solve();
	}	
	return 0;
}

在这里插入图片描述

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

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

相关文章

(十)C++自制植物大战僵尸游戏设置功能实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 游戏设置 游戏设置功能是一个允许玩家根据个人喜好和设备性能来调整游戏各项参数的重要工具。游戏设置功能是为了让玩家能够根据自己的需求和设备性能来调整游戏&#xff0c;以获得最佳的游戏体验。不同的游戏和平…

相机系列——透视投影:针孔相机模型

作者&#xff1a;木一 引言 上文我们提到&#xff0c;三维相机是对真实世界成像的模拟&#xff0c;为了让三维物体在计算机屏幕上呈现出来的图像符合人眼观察效果&#xff0c;通常采用透视投影方式模拟相机成像&#xff0c;为了简化计算&#xff0c;可以用针孔相机模型来描述…

设计模式——观察者模式17

观察者模式指多个对象间存在一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式。 中介者模式是N对N的双向关系。观察者模式是1对N的单向关系。 设计模式&#xff0c;一定要敲代码…

STC89C52学习笔记(十三)

STC89C52学习笔记&#xff08;十三&#xff09; 综述&#xff1a;本文讲述了红外调控的原理和通信以及外部中断相关知识。 一、红外调控 1、定义 红外遥控是利用红光进行通信的设备。 2、特点 ①由红LED将调制后的信号发出&#xff0c;由专门的红外接收头进行解调输出。 …

​​​​网络编程探索系列之——广播原理剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之广播原理剖析&#xff0c;在这篇文章中&#xff0c; 你将会学习到如何在网络编程中利用广播来与局域网内加入某个特定广播组的主机&#xff01; 希望这篇文章能对你有所帮助&#xff0c;大家要是觉得我写…

jupyter使用虚拟环境里的依赖配置

进入虚拟环境fourier-features-pytorchconda activate fourier-features-pytorch 安装ipykernel pip install ipykernel -i https://pypi.tuna.tsinghua.edu.cn/simple将核与虚拟环境匹配 python -m ipykernel install --user --namefourier-features-pytorch打开jupyter j…

Kafka 架构深入介绍 及搭建Filebeat+Kafka+ELK

目录 一 架构深入介绍 &#xff08;一&#xff09;Kafka 工作流程及文件存储机制 &#xff08;二&#xff09;数据可靠性保证 &#xff08;三&#xff09;数据一致性问题 &#xff08;四&#xff09;故障问题 &#xff08;五&#xff09;ack 应答机制 二 实…

【max材质addtive叠加模式特效渲染不出通道的解决办法】

max材质addtive叠加模式特效渲染不出通道的解决办法 2021-12-22 18:15 max的scanline扫描线&#xff0c;vray渲染可以&#xff0c;红移不行(只支持它自己的材质&#xff0c;它自己的材质没有additive模式)。据说mr是可以的。 右侧的球体使用附加不透明度。 附加不透明度通过将…

关于机器学习/深度学习的一些事-答知乎问(六)

如何使用频率域变换对序列数据进行增强&#xff1f; 时频变换是常见的信号分析思路&#xff0c;同样可用于数据增强。在频率域添加噪声是方法之一。比如可以对传感器信号应用短时傅里叶变换STFT得到具有时序关系的谱特征&#xff0c;再在谱特征上应用两种数据增强方法。一是对…

Amazon MemoryDB for Redis的探索和实践

一、背景 由于当下项目的日益增长的数据量&#xff0c;单机Redis已经远远不能满足我们的要求。考虑转成集群&#xff0c;但是直接在服务器中搭建Redis集群的话&#xff0c;EC2挂掉则Redis也会随之挂掉&#xff0c;耦合性太强。所以将Redis相关的服务全部抽取在单独的服务器上或…

论文笔记:Time Travel in LLMs: Tracing Data Contamination in Large Language Models

iclr 2024 spotlight reviewer评分 688 1 intro 论文认为许多下游任务&#xff08;例如&#xff0c;总结、自然语言推理、文本分类&#xff09;上观察到的LLMs印象深刻的表现可能因数据污染而被夸大 所谓数据污染&#xff0c;即这些下游任务的测试数据出现在LLMs的预训练数据…

ins视频批量下载,instagram批量爬取视频信息

简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…

MySQL模糊查询

一、MySQL通配符模糊查询(%&#xff0c;_) 1.1.通配符的分类 1.“%”百分号通配符&#xff1a;表示任何字符出现任意次数&#xff08;可以是0次&#xff09; 2.“_”下划线通配符&#xff1a;表示只能匹配单个字符&#xff0c;不能多也不能少&#xff0c;就是一个字符。当然…

计算机组成原理【CO】Ch3 存储系统

文章目录 考纲3.1 存储系统概述3.2 主存储器3.3 主存储器与CPU的连接3.4 外部存储器3.5 高速缓冲存储器3.6 虚拟存储器【※】存储系统总体流程图【※】各个部件的存储位置计算机存储相关硬件与数据结构说明进程控制块(PCB)页表页表始址页表始址寄存器(PTR)MMU(内存管理单元…

Springboot Gateway 报错Failed to resolve “bogon”的原因及解决办法

一、问题出现原因及初步分析 今天遇到一个奇怪的错误&#xff0c;一个一直正确运行的微服务后台&#xff0c;突然无法访问&#xff0c;如何重启都会报错。 想到近期有人在服务器上安装过其它服务&#xff0c;因此&#xff0c;考虑可能是配置问题&#xff0c;可配置问题修复后…

实时数据同步之Maxwell和Canal

文章目录 一、概述1、实时同步工具概述1.1 Maxwell 概述1.2 Canal概述 2、数据同步工作原理2.1 MySQL 主从复制过程2.2 两种工具工作原理 3、MySQL 的 binlog详解3.1 什么是 binlog3.2 binlog 的开启3.3 binlog 的分类设置 4、Maxwell和Canal对比5、环境安装 二、Maxwell 使用1…

信也科技网络自动化实践-网络策略管理

1、背景 随着各种法律法规和行业标准的出台和更新&#xff0c;企业或组织需要遵守各种安全合规性要求。网络安全策略管理需要符合这些要求&#xff0c;从而保障企业或组织的安全和合规性。网络安全策略管理需要涵盖企业或组织的整个网络生命周期&#xff0c;包括网络规划、设计…

halcon 3.2标定相机

参考《solution_guide_iii_c_3d_vision.pdf》 3.2.2.2 Which Distortion Model to Use 选用何种畸变模型 对于面阵相机&#xff0c;halcon中两种畸变模型&#xff1a;The division model and the polynomial model&#xff08;差分模型和多项式模型&#xff09;&#xff0c;前…

MLOps

参考&#xff1a; 什么是MLOps&#xff1f;与DevOps有何异同&#xff1f;有什么价值&#xff1f;https://baijiahao.baidu.com/s?id1765071998288593530&wfrspider&forpcMLOps简介_AI开发平台ModelArts_WorkflowMLOps(Machine Learning Operation)是机器学习&#xf…

kafka(六)——存储策略

存储机制 kafka通过topic作为主题缓存数据&#xff0c;一个topic主题可以包括多个partition&#xff0c;每个partition是一个有序的队列&#xff0c;同一个topic的不同partiton可以分配在不同的broker&#xff08;kafka服务器&#xff09;。 关系图 partition分布图 名称为t…