- 题目链接:1013 数素数
- 考查知识:欧拉筛
- 题意描述:输出素数表中第n个到第m个的所有素数
- 思路简析:欧拉筛即可,本文使用板子来自《算法竞赛进阶指南》
- 具体代码
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6; int v[N],p[N]; void primes(int n){ memset(v,0,sizeof(v));int m=0;//最小质因子,质数数量 for(int i=2;i<=n;i++){ if(!v[i]){v[i]=i;p[++m]=i;}//i是质数 for(int j=1;j<=m;j++){//给当前的数i乘上一个质因子 if(p[j]>v[i]||p[j]>n/i)break;//i有比prime[j]更小的质因子或者超出n的范围,停止循环 v[i*p[j]]=p[j];//p[j]是合数i*p[j]的最小质因子 } } } int main(){ primes(N); int n,m,cn=0; cin>>n>>m; for(int i=n;i<=m;i++){ cout<<p[i]; if((++cn)%10==0)cout<<endl; else if(i!=m)cout<<' '; } return 0; }
1013 数素数(欧拉筛)
于 2022-04-08 15:53:07 首次发布