题目难度:一颗半星
题目大意:计算出M-N个素数
题目坑点:刚开始数组开小了 其中一个测试点总是过不去,扩大了之后通过了所有测试点。
其次,看算法笔记,埃氏筛法选取素数的方法还不错,看笔记上说还有更优的欧拉筛法,暂时没时间看,稍后再说。
代码如下:
#include<iostream>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
const int maxsize=1000001;
int prime[maxsize],primenum=0;
int vis[maxsize];
void find_prime(int n){
for(int i=2;i<maxsize;i++){
if(vis[i]==0){
prime[primenum++]=i;
for(int j=i+i;j<maxsize;j+=i){
vis[j]=1;
}
if(primenum>n)
break;
}
}
}
int main(){
memset(vis,0,sizeof(int)*maxsize);
int M,N;
cin>>M>>N;
find_prime(N);
int count=0;
for(int i=M-1;i<N;i++){
count++;
cout<<prime[i];
if(count%10!=0&&i<N-1)
cout<<" ";
else
cout<<endl;
}
}