【蓝桥杯2025备赛】素数判断:从O(n^2)到O(n)学习之路

素数判断:从O( n 2 n^2 n2)到O(n)学习之路

背景:每一个初学计算机的人肯定避免不了碰到素数,素数是什么,怎么判断?

素数的概念不难理解:素数即质数,指的是在大于1的自然数中,除了1和它本身不再有其他因数的自然数。

如何判断

刚进大学时,我最开始接触的就是最简单的那种,比较容易理解,但复杂度较高,容易超时

暴力写法

#include <iostream>
using namespace std;int primes[10000];
int main()
{int cnt = 0,n=1000;for (int i = 2; i < n; i++){int temp = 0;//假定是素数for (int j = 2; j < i; j++){if (i % j == 0) { temp = 1; break; }//只要i能整除j,那肯定不是质数,temp=1标记为合数}if (!temp)primes[cnt++] = i;}for (int i = 0; i < 20; i++)cout << primes[i] << " ";
}

时间复杂度:O( n 2 n^2 n2​​)

之后有看了网上的一些写法,学了些优化的方法

比如,我们判断到 n \sqrt n n 就可以结束了,为什么可以这样呢?

下面的这个图或许可以说明这一点

在这里插入图片描述

#include <iostream>
using namespace std;int primes[10000];
int main()
{int cnt = 0, n = 1000;for (int i = 2; i <n; i++){int temp = 0;//假定是素数if (i > 2 && i % 2 == 0)continue;//大于2的偶数肯定不是素数for (int j = 2; j*j<=i; j++)//这个地方可以写成j<=sqrt(i);但调用函数会慢一点//其次,写成乘法,而尽量不写j<=i/j;,乘法比除法更快,当然有溢出风险的时候,还得是j<=i/j;{if (i % j == 0) { temp = 1; break; }//只要i能整除j,那肯定不是质数,temp=1标记为合数}if (!temp)primes[cnt++] = i;}for (int i = 0; i < 20; i++)cout << primes[i] << " ";
}

终极大法:欧拉线性筛

时间复杂度:O( n n n​)

关于这方面的解释,我找了下知乎大佬的解释,我自己大概明白了基本原理,但并不能很好的阐述它

废话不多说,上图!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

img

const int N=100000;
int primes[N];//质数表,是质数的加入其中
bool st[N];//false表示素数,true为非素数
void get_primes(int N)//利用线性筛找到2~n中的质数
{int cnt=0;st[0]=true;st[1]=true;//0和1为非素数for(int i=0;i<=N;i++){if(!st[i])primes[cnt++]=i;//如果没被筛掉,是质数,假如质数表for(int j=0;i*primes[j]<=N;j++){st[i*primes[j]]=true;//用最小质因子去筛素数if(i%primes[j]==0)break;}}
}

OK,让我们来道题试试吧

X的因子链

输入正整数$ X$,求 X X X 的大于 11 的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。

输入格式

输入包含多组数据,每组数据占一行,包含一个正整数表示 X X X

输出格式

对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。

每个结果占一行。

数据范围

1 ≤ X ≤ 2 20 1≤X≤2^{20} 1X220

输入样例:
2
3
4
10
100
输出样例:
1 1
1 1
2 1
2 2
4 6
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=(1<<20)+5;
int primes[N];bool st[N];
int minp[N];
void get_primes()//线性筛质数
{int cnt=0;for(int i=2;i<=N;i++){if(!st[i]){primes[cnt++]=i;minp[i]=i;}//记录最小质因数for(int j=0;primes[j]*i<=N;j++){st[primes[j]*i]=true;minp[primes[j]*i]=primes[j];//最小质因数if(i%primes[j]==0)break;}}
}
int main()
{   int x;get_primes();while(scanf("%d",&x)!=EOF){int k=0;int total=0;int sum[10]={0};//初始化数组while(x>1)//数的分解,用最小质因数去分解{  int t=minp[x];sum[k]=0;//我要用到的时候再重置为0,没用到的数据不为0没关系,因为遍历时数组只会遍历到k//而这k个数据在这里已经被重置后进行运算while(x%t==0){sum[k]++;total++;x/=t;}k++;}ll res=1;for(int i=2;i<=total;i++)res*=i;//总的阶乘for(int j=0;j<k;j++)for(int i=1;i<=sum[j];i++)res/=i;printf("%d %lld\n",total,res);memset(sum,0,sizeof(sum));//注意,这里开了memset会超时的,10^6的长度数组有100组数据就会运算10^8次了,容易超时}                          //当然,我们数组开到10然后重置是不会超时的,return 0;
}

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

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

相关文章

比 PSD.js 更强的下一代 PSD 解析器,支持 WebAssembly

比 PSD.js 更强的下一代 PSD 解析器&#xff0c;支持 WebAssembly 1.什么是 webtoon/ps webtoon/ps 是 Typescript 中轻量级 Adobe Photoshop .psd/.psb 文件解析器&#xff0c;对 Web 浏览器和 NodeJS 环境提供支持&#xff0c;且做到零依赖。 Fast zero-dependency PSD par…

openWebUI+ollamawindows+不用docker+webLite本地安装

openWebUI & ollama & windows & 不用docker & webLite 本地安装 总结一下安装教程 10核CPU16G内存 两个web框架都可以&#xff0c;先说简单的 ollama-webui-lite(https://github.com/ollama-webui/ollama-webui-lite) 轻量级&#xff0c;只使用nodejs 先装…

【介绍下如何使用CocoaPods】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

模板(二)

文章目录 模板&#xff08;二&#xff09;1 非类型模板参数2. 模板的特化2.1. 概念2.2 函数模板特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化2.3.3 类模板特化应用示例 3 模板的分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法 4. 模板总结 模板&#xff08;二&…

20.Nacos集群搭建

模拟Nacos三个节点&#xff0c;同一个ip,启动三个不同的端口&#xff1a; 节点 nacos1, 端口&#xff1a;8845 节点 nacos2, 端口&#xff1a;8846 节点 nacos3, 端口&#xff1a;8847 1.搭建数据库&#xff0c;初始化数据库表结构 这里我们以单点的数据库为例 首先新建一…

vue与Spring boot数据交互例子【简单版】

文章目录 什么是Vue&#xff1f;快速体验Vueaxios是什么&#xff1f;向Springboot后端发送数据接收Springboot后端数据小结 什么是Vue&#xff1f; 官网解释&#xff1a;Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上…

黑马微服务课程1

目录 一、GateWay 二、服务调用OpenFeign 三、Sentinel 1. 流量控制&#xff08;限流规则&#xff09; 2. 隔离和降级 2.1 FeignClient整合Sentinel 2.2 线程隔离&#xff08;舱壁模式&#xff09; 2.3 熔断降级 3. 授权规则 3.1 授权规则 3.2 自定义异常结果 4. 规…

功能测试前景揭秘:会被淘汰吗?

在当今快速发展的信息时代&#xff0c;软件已经成为我们工作、学习乃至生活中不可或缺的一部分。随着技术的不断进步和应用的广泛普及&#xff0c;软件测试作为保障软件质量和功能实现的关键步骤&#xff0c;其职业发展路径也受到了广泛的关注。特别是针对功能测试这一细分领域…

T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件

大家好&#xff0c;我叫秋意零。 最近对公司进行日常运维工作时&#xff0c;出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时&#xff0c;业务也停了一个多小时。 起因是&#xff1a;我的部门直系领导&#xff0c;叫我**删除一个 …

计算机视觉 CV 八股分享 [自用](更新中......)

目录 一、深度学习中解决过拟合方法 二、深度学习中解决欠拟合方法 三、梯度消失和梯度爆炸 解决梯度消失的方法 解决梯度爆炸的方法 四、神经网络权重初始化方法 五、梯度下降法 六、BatchNorm 七、归一化方法 八、卷积 九、池化 十、激活函数 十一、预训练 十二…

MemFire解决方案-物联网数据平台解决方案

方案背景 随着各种通讯、传感技术发展&#xff0c;数据通讯成本的急剧下降&#xff0c;数以万亿计的智能设备&#xff08;智能手环、智能电表、智能手机、各种传感器设备等&#xff09;接入网络&#xff0c;并源源不断的产生海量的实时数据。这些海量数据的价值挖掘&#xff0…

【算法基础实验】图论-基于DFS的连通性检测

基于DFS的连通性检测 理论基础 在图论中&#xff0c;连通分量是无向图的一个重要概念&#xff0c;特别是在处理图的结构和解析图的组成时。连通分组件表示图中的一个子图&#xff0c;在这个子图中任意两个顶点都是连通的&#xff0c;即存在一条路径可以从一个顶点到达另一个顶…

【Webgl_glslThreejs】搬运分享shader_飘落心形

来源网站 https://www.shadertoy.com/view/4sccWr效果预览 代码演示 将shadertory上的代码转成了threejs可以直接用的代码&#xff0c;引入文件的material&#xff0c;并在创建mesh或已有物体上使用material即可&#xff0c;使用时请注意uv对齐。 import { DoubleSide, Shad…

深度学习从入门到精通—Transformer

1.绪论介绍 1.1 传统的RNN网络 传统的RNN&#xff08;递归神经网络&#xff09;主要存在以下几个问题&#xff1a; 梯度消失和梯度爆炸&#xff1a;这是RNN最主要的问题。由于序列的长距离依赖&#xff0c;当错误通过层传播时&#xff0c;梯度可以变得非常小&#xff08;消失…

(MSFT.O)微软2024财年Q3营收619亿美元

在科技的浩渺宇宙中&#xff0c;一颗璀璨星辰再度闪耀其光芒——(MSFT.O)微软公司于2024财政年度第三季展现出惊人的财务表现&#xff0c;实现总营业收入达到令人咋舌的6190亿美元。这一辉煌成就不仅突显了微软作为全球技术领导者之一的地位&#xff0c;更引发了业界内外对这家…

第十五届蓝桥杯题解-数字接龙

题意&#xff1a;经过所有格子&#xff0c;并且不能进行交叉&#xff0c;走的下一个格子必须是当前格子值1%k&#xff0c;输出路径最小的那一条&#xff08;有8个方向&#xff0c;一会粘图&#xff09; 思路&#xff1a;按照8个方向设置偏移量进行dfs&#xff0c;第一个到达终…

C/C++ 入门(7)string类(STL)

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 请多多指教&#xff01; 目录 一、标准库中的string 1、了解 2、string类常用接口说明 1、常见的构造函数 2、容量操作 ​编辑 3、访问及遍历操作 4、修改操作 5、非成员函数 二、string类实现 …

LeetCode57. 插入区间

LeetCode57.插入区间 题目思路: 代码 /* 前置知识&#xff1a; vector<vector<int>> a,b; 二维vector数组是可以将二维中的一维vector数组给push_back的&#xff0c; 不是只有单个元素才可以&#xff0c;整个一维的vector数组也可以 b[0] {1,2,3},b[1] {4,5,6}…

【AIGC调研系列】大型语言模型如何减少幻觉生成

在解读大型语言模型&#xff08;LLMs&#xff09;中的长格式事实性问题时&#xff0c;我们首先需要认识到这些模型在生成内容时可能会产生与既定事实不一致的情况&#xff0c;这种情况通常被称为“幻觉”[2][3]。这种现象不仅可能导致信息的误传&#xff0c;还可能对社会造成误…

封装 H.264 视频为 FLV 格式然后推流

封装 H.264 视频为 FLV 格式并通过 RTMP 推流 flyfish 协议 RTMP (Real-Time Messaging Protocol) RTSP (Real Time Streaming Protocol) SRT (Secure Reliable Transport) WebRTC RTMP&#xff08;Real Time Messaging Protocol&#xff09;是一种用于实时音视频流传输的协…