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

数论学习笔记:素数筛

关于求素数的,如果只需要求一个素数,可以直接根据定义求。如果是求一个范围内的多个素数,就需要用到素数筛了,常用素数筛就是欧拉筛。

一、素数筛(欧拉筛)

所谓素数筛就是求出小于等于n的所有素数的一个数论方法,常用的素数筛就是欧拉筛,欧拉筛的时间性能和空间性能都十分友好,时间复杂度为O(n),空间复杂度也为O(n)。

二、板子

之前学的时候经常用的板子,太久没复习忘光光了,这里做个记录,就当复习了~

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'

bool isprime[1000100]; //记录i是不是素数的数组
vector<int> prime; //用来记录素数

void oula(int n){
	/*memset可以赋值 0(int型)或者 true和false(bool型),不能赋值 1*/
	memset(isprime,true,sizeof(isprime));   //初始情况下全部都为素数
	for(int i=2;i<=n;i++){
		if(isprime[i]) prime.push_back(i);//如果数i没有被筛法筛掉,说明它是素数
		for(int j=0;j<prime.size()&&i*prime[j]<=n;j++){
			isprime[i*prime[j]]=false; //这个数是一个素数的i倍,所以将它筛掉,不是素数
			if(i%prime[j]==0) break; //神之一笔,就是这个判断让素数筛复杂度变为O(n) 
		} 
	} 
} 

signed main(){
	int n;
	cin>>n;
	oula(n);
	cout<<prime.size();
}

 三、基础例题

这里主要节选自晴问算法网站,拜谢晴神的《算法笔记》!!

T1--打印素数表

T2--素数个数

T3--最大素数

T4--最小素数
 

可以直接套板子,小改即可!

四、真题

这里介绍一个蓝桥杯真题,晚点会给真题链接和题解链接。

0双子数 - 蓝桥云课(真题链接)

双子数题解(蓝桥杯)-CSDN博客(题解链接)

http://www.dtcms.com/a/122911.html

相关文章:

  • 数据库事务隔离级别
  • 前端性能指标详解
  • 【Leetcode-Hot100】盛最多水的容器
  • React 响应事件
  • 如何实现文本回复Ai ChatGPT DeepSeek 式文字渐显效果?前端技术详解(附完整代码)
  • 【MySQL】安装
  • CD25.【C++ Dev】类和对象(16) static成员(上)
  • redis(2)-mysql-锁
  • 经典算法 最近点对问题
  • 猜猜乐游戏(python)
  • Trae AI 保姆级教程:从安装到调试全流程指南
  • FastAdmin和thinkPHP学习文档
  • 国标GB28181协议EasyCVR视频融合平台:5G时代远程监控赋能通信基站安全管理
  • 文字识别 (OCR) 工具
  • js 拷贝-包含处理循环引用问题
  • c++和python复制java文件到指定目录
  • AQS机制详解与总结
  • java方法07:加减乘除计算器
  • rkmpp 解码 精简mpi_dec_test.c例程
  • LeetCode 热题 100 题解记录
  • Docker Hello World
  • 计算机网络 实验三:子网划分与组网
  • GaussDB性能调优:从根因分析到优化落地
  • 10. git switch
  • Java MCP SDK 开发笔记(一)
  • 深度学习疑问--Transformer【3】:transformer的encoder和decoder分别有什么用?encoder是可以单独使用的吗
  • WHAT - React 进一步学习推荐
  • Electron 应用太重?试试 PakePlus 轻装上阵
  • LVM 扩容详解
  • 0 std::process::Command 介绍