记PAT乙级1013-数素数
本题用筛法数素数,筛法就是从1开始,某一个范围内正整数从小到大顺序排列。首先排除1,然后从最小的数开始去除他的倍数。依次类推,直到筛子为空。
#include <cstdio>
const int maxn=1000010;
int prime[maxn],num=0;
bool p[maxn]={0};
//筛法判断素数
void Find_prime(int n){
int num=0;
for(int i=2;i<maxn;i++){
//n以内的所有素数
if(p[i]== false){
prime[num++]=i;//是素数进入prime
if(num>=n) break;
for(int j=i+i;j<maxn;j+=i){//j为i的倍数
p[j]=true;//全为非素数
}
}
}
}
int main(){
int m,n,count=0;
scanf("%d %d",&m,&n);
Find_prime(n);
for (int i = m; i <= n; ++i) {
printf("%d",prime[i-1]);
count++;
if(count%10!=0&&i<n) printf(" ");
else printf("\n");
}
return 0;
}
注意
maxn要设置大一点