【蓝桥杯】 历届试题 幸运数(向量筛)

2024-03-30 13:08

本文主要是介绍【蓝桥杯】 历届试题 幸运数(向量筛),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

历届试题 幸运数

问题描述
幸运数是波兰数学家乌拉姆命名的,它采用与生成素数类似的“筛法”生成
首先从1开始写出自然数1,2,3,4,5,6,…
1 就是第一个幸运数。
我们从2这个数开始。把所有序号能被2整除的项删除,变为:
1 _ 3 _ 5 _ 7 _ 9 ……
把它们缩紧,重新记序,为:
1 3 5 7 9 …… 这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去。注意,是序号位置,不是那个数本身能否被3整除!! 删除的应该是5,11, 17, …
此时7为第3个幸运数,然后再删去序号位置能被7整除的(19,39,…)
最后剩下的序列类似:
1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, …

输入格式:输入两个正整数m n, 用空格分开 (m < n < 1000*1000)
输出格式:程序输出 位于m和n之间的幸运数的个数(不包含m和n)。

样例输入:1 20
样例输出:5

样例输入:30 69
样例输出:9(题目中的输出是8,但是测试证明,确实应该是9)



---分割线---


分析:
无论是题目给的提示,还是“幸运数”生成描述,都在很直接的告诉你——要用筛法
我们确实也应该从这里出发
最开始我的想法是数组,但是数组种元素的缺减会导致之后的大量元素整体后移
这极有可能超时,并且数组操作极为不便

于是想到用向量(向量中元素缺减也会导致大量元素整体后移,但是其用到了堆排序,在调整时速度远远快于数组),反正既然有现成的数据结构,为什么你还要去自己写呢?

最后说一下我的解题思路
首先,建立一个向量v,然后利用循环,将输入数据n作为向量中的上限(即1-n)将其整体纳入v中。
接着,建立一个最外层while循环(退出条件为当前取出的幸运数大于向量长度)
而在此循环中的内容则为一个永真循环(目的是将当前向量进行一个筛选,选出每一次从向量头到向量尾中,应该被舍弃掉的那些数)
注意:这个永真循环中的具体实现方式是利用一个错位的过程(错位是指将应该保留下来的数字跳过,而那些该移除的数字则被删除掉)来控制向量中数据的留与删。
在这些while循环中的最里层,我定义了一个指针来扫描向量,当这个指针越界(即p>v.size())就会直接goto到循环外(具体见代码)。
当内部两个循环都结束之后,我们的工作有两部分:
1.更新k的值(k表示了第pos+1个幸运数)
2.更新p指针为0

这样,最后在main函数中,我就可以通过一个循环来检测出当前范围中的幸运数个数了(需要注意的是:由于在前面的筛法中我已经限制了最大值的阈值,那么在这里求幸运数个数时,我仅仅需要找到最小值的位置就行了)

废话不多说,下面直接上本题的完整代码:


---分割线---

#include<iostream>
#include<vector>
using namespace std;int pos=1,m,n;
vector<int> v;
void generate()
{for(int i=1;i<=n;i++)v.push_back(i);int k=2,p=0;			 //k表示第pos+1个幸运数(初始化为2,但不是幸运数) while(k<=v.size())		 //当k的大小已经超出了栈总长时,说明在当前范围内的幸运数已经全部找出 {while(1){int i=1;while(i<k){p++,i++;if(p<v.size()) continue;else goto lable;}v.erase(v.begin()+p);}lable: k=v[pos++];p=0;}
}int main()
{cin>>m>>n;generate();int ans=0;for(int i=0;i<v.size();i++)if(v[i]>m){ans=v.size()-i;break;}cout<<ans<<endl;return 0;
}

这篇关于【蓝桥杯】 历届试题 幸运数(向量筛)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861570

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

8. 自然语言处理中的深度学习:从词向量到BERT

引言 深度学习在自然语言处理(NLP)领域的应用极大地推动了语言理解和生成技术的发展。通过从词向量到预训练模型(如BERT)的演进,NLP技术在机器翻译、情感分析、问答系统等任务中取得了显著成果。本篇博文将探讨深度学习在NLP中的核心技术,包括词向量、序列模型(如RNN、LSTM),以及BERT等预训练模型的崛起及其实际应用。 1. 词向量的生成与应用 词向量(Word Embedding)

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

利用向量积(叉积)计算三角形的面积和多边形的面积(hdu2036)

开始撸计算几何题目了。。。。。。。 预备知识:叉乘求多边形面积 参考证明资料: 公式证明: http://www.cnblogs.com/xiexinxinlove/p/3708147.html 高中知识: http://wenku.baidu.com/view/867e6edfad51f01dc281f11a.html #include<stdio.h>#inclu

计算几何之向量旋转

实际做题中我们可能会遇到很多有关及计算几何的问题,其中有一类问题就是向量的旋转问题,下面我们来具体探讨一下有关旋转的问题。 首先我们先把问题简化一下,我们先研究一个点绕另一个点旋转一定角度的问题。已知A点坐标(x1,y1),B点坐标(x2,y2),我们需要求得A点绕着B点旋转θ度后的位置。 A点绕B点旋转θ角度后得到的点,问题是我们要如何才能得到A' 点的坐标。(向逆时针方向旋转角度正,

深度学习速通系列:如何生成句向量?

生成句向量(Sentence Embedding)是自然语言处理(NLP)中的一项重要技术,它将文本句子转换为固定长度的数值向量,这些向量能够捕捉句子的语义信息。以下是一些生成句向量的方法: 词袋模型(Bag of Words, BoW): 将句子中的每个词转换为一个特征向量,并将所有词的特征向量平均或求和,以生成句子的向量表示。 TF-IDF: 使用词频-逆文档频率(Term Freque