当前位置: 首页 > news >正文

蓝桥杯冲击01 - 质数篇

目录

前言

一、质数是什么

二、易错点

三、试除法判断是否为质数

四、质数常考三大模型

五、真题练手


前言

距离蓝桥杯还有一个月,高效复习蓝桥杯知识,

质数相关的题目在蓝桥杯中经常出现。例如,2016年蓝桥杯省赛初赛第四题就是要求判断一个数是否为质数。此外,还有许多与素数相关的题目,如求一定范围内素数数量、素数和等等。因此,掌握质数的判断、筛法、求和等基本算法是参加蓝桥杯的必备技能之一。


提示:以下是本篇文章正文内容,下面案例可供参考

一、质数是什么

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。


二、易错点

1、考试中最常考到的模型是也就是最简单的模型,判断一下什么是质数,大部分使用暴力枚举直接从2开始到这个数判断,但是往往这样面对数据比较大的时候容易出现超时,可以使用sqrt(n),但是每次枚举都要调用一下,最好的方法是

for(int i = 2;i <= n / i;i ++)

 2、其次还有一点1和2都不是质数,这俩个数要进行特判一下,防止出错误。


三、试除法判断是否为质数

以下代码常用来判断是否为质数


bool is_prime(int x)
{if(x < 2 ) return false;for(int i = 2;i <= x / i;i ++){if(x%i == 0)return false;}return true;
}

四、质数常考三大模型

1、判断是否为质数

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>using namespace std;bool is_prime(int x)
{if(x < 2 ) return false;for(int i = 2;i <= x / i;i ++){if(x%i == 0)return false;}return true;
}
int main()
{int n;cin >>n;while(n--){int x;cin >> x;if(pd(x)) cout << "Yes" <<endl;else cout <<"No" <<endl;}
}

2、分解质因数

 解

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
void divide(int n)
{for(int i = 2;i <= n/i;i ++){if(n % i == 0){int s = 0;while(n % i == 0){n /= i;s ++;}cout << i << " " << s <<endl;}}if(n > 1) cout << n << " " << "1" <<endl;puts("");
}
int main()
{int n;cin >> n;while(n--){int x;cin >> x;divide(x);}return 0;}

3、筛选质数

 解

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
const int N = 1000010;
int prime[N],cnt;
bool st[N];
void get_primes(int x)
{for(int i = 2;i <= x;i++){if(!st[i]){prime[cnt] = i;cnt ++;}for(int j = i;j <= x;j += i) st[j] = true; // 所有有整除关系的都筛掉}}
int main()
{int n;cin >> n;get_primes(n);cout << cnt << endl;return 0;
}

五、真题练手

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

我们知道第一个质数是 22、第二个质数是 33、第三个质数是 55……

请你计算第 20192019 个质数是多少?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

#include <iostream>
using namespace std;
bool divide(int x)
{if(x < 2) return false;for(int i = 2;i <= x / i;i ++){if(x % i == 0) return false;}return true;
}
int res;
int main()
{int i;for(i = 1;;i ++){if(divide(i)){res ++;}if(res == 2019) break;}cout << i ;return 0;
}

http://www.lryc.cn/news/39405.html

相关文章:

  • 【WEB前端进阶之路】 HTML 全路线学习知识点梳理(下)
  • MySQL索引分类
  • 会声会影2023最新版图文安装详细教程
  • Java中的反射
  • STM32入门笔记(03):STM32F103C8T6定时器的输入捕获模式和编码器模式(SPL库函数版)
  • 《网络安全》零基础教程-适合小白科普
  • 微信小程序语言与web开发语言的区别
  • 【2022-09-14】米哈游秋招笔试三道编程题
  • 云监控能力介绍
  • HTML 文档类型
  • 【UML】软件设计说明书 (完结)
  • MATLAB——FFT(快速傅里叶变换)
  • 力扣-进店却未进行过交易的顾客
  • 一文解决vscode中借助CMake配置使用Opencv过程中的所有问题
  • Golang每日一练(leetDay0004)
  • 手机忘记密码解锁的 6 大软件方法
  • MySQL数据库的基础语法总结(1)
  • Linux之进程创建
  • DCL 管理用户与权限控制
  • 如何使用 Python 检测和识别车牌(附 Python 代码)
  • [Python题解] CodeForces 1804 D. Accommodation
  • 【设计模式】访问者模式
  • 蓝桥杯刷题冲刺 | 倒计时27天
  • RV1126_python人脸识别Retinaface+MobilefaceNet
  • HBase---HBase基础语法
  • 2023年,PMP有多少含金量呢?
  • vue动态路由
  • 被骗进一个很隐蔽的外包公司,入职一个月才发现,已经有了社保记录,简历污了,以后面试有影响吗?...
  • 华为OD机试 -租车骑绿岛(Java) | 机试题+算法思路+考点+代码解析 【2023】
  • 【Java|基础篇】用思维导图理解逻辑控制