素数筛(欧拉筛算法)

#include<bits/stdc++.h>

using namespace std;

#define maxn 100000

int vis[maxn];

int prime[maxn];

//欧拉筛函数

int Euler_sieve(int n)

{

int i,j,k;

k=0;//保存素数的个数

memset(vis,0,sizeof(int)*maxn);//初始化数组

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

{

if(vis[i]==0)//i是素数,则存起来

prime[k++]=i;

for(j=0;j<k;j++)//进行倍增,用i去乘以i之前(包括i)的素数

{

if(i*prime[j]>n)//倍增结果超出范围,退出

break;

vis[ i*prime[j] ]=1;//将倍增结果进行标记

if(i%prime[j]==0)//i是前面某个素数的倍数时,也需要退出,能大大提升时间效率

break;

}

}

return k;

}

int main(){

int n;

cin>>n;

int len=Euler_sieve(n);

for(int i=0;i<len;i++){

cout<<prime[i]<<endl;

}

return 0;

}

相关推荐
式51611 小时前
线性代数(七)主变量与特解
线性代数·算法
业精于勤的牙17 小时前
浅谈:算法中的斐波那契数(二)
算法·职场和发展
不穿格子的程序员17 小时前
从零开始写算法——链表篇4:删除链表的倒数第 N 个结点 + 两两交换链表中的节点
数据结构·算法·链表
liuyao_xianhui17 小时前
寻找峰值--优选算法(二分查找法)
算法
dragoooon3417 小时前
[hot100 NO.19~24]
数据结构·算法
神仙别闹18 小时前
基于QT(C++)实现学本科教务系统(URP系统)
数据库·c++·qt
deng-c-f18 小时前
Linux C/C++ 学习日记(49):线程池
c++·学习·线程池
ulias21219 小时前
C++ 的容器适配器——从stack/queue看
开发语言·c++
daidaidaiyu19 小时前
FFmpeg 关键的结构体
c++·ffmpeg
Tony_yitao19 小时前
15.华为OD机考 - 执行任务赚积分
数据结构·算法·华为od·algorithm