令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM到 PN的所有素数。
输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:
输出 PM到 PN的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
代码:
#include<iostream>
using namespace std;
const int maxsize=109000;//这个地方很容易出错,如果你的数组不够大的话,测试点4会无法通过
int sushu[10010]={0};//用sushu数组来存储素数
int ini=1;//初始数组下标,ini表示第几个素数
bool judge[maxsize]={0};//0是false,表示是素数,true表示不是素数
void create(int n){//创造素数数组
for(int i=2;i<maxsize;i++){//因为1不是素数,所以从2开始
//写这里的代码的时候思路要清晰,思路就是:遍历整个区间的数字,对每个素数不停的翻倍,直到数字为最大
//对由素数翻倍而来的数字它的judge数组变成true,这时候这个数字就不是素数了
if(judge[i]==false){//如果是素数
sushu[ini++]=i;
for(int j=i+i;j<maxsize;j+=i)//从这个不是素数的数字的二倍开始,到n倍知道小于最大值
judge[j]=true;
}
}
}
int main(){
int n,m,count=0;
scanf("%d %d",&m,&n);
create(n);
for(int i=m;i<=n;i++){
printf("%d",sushu[i]);//输出素数
count++;//用来计数
if(count%10==0) printf("\n");//在第10个数字后面输出一个换行符
else if(count<n-m+1) printf(" ");//这里很重要,写错了会导致格式错误
}
return 0;
}