PAT Basic 1013. 数素数 (20)
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
令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
解答:
M, N <=10000,所以构造一个数组prime[1e4+5]用来存放素数
输出数组中从下标M到下标N的素数即可,
注意:因为prime[5]=11,所以数组下标从1开始。
#include <iostream>
#include <cstring>
// AC
using namespace std;
const int maxn = 1e4+5;
int pri[maxn];
//判断是否是素数
int isPrime(int n){
if(n<2) return 0;
for(int i=2;i*i<=n;i++){
if(n%i==0) return 0;
}
return 1;
}
//初始化素数数组
void inits(){
memset(pri, 0, sizeof(pri));
int j=0;
for(int i=2;j<maxn;i++){
if(isPrime(i)) pri[j++]=i;
}
}
int main(){
inits();
int m, n;
cin>>m>>n;
int cnt=0;
for(int i=m-1;i<=n-1;i++){
++cnt;
//题目要求以10个为1行输出
if(cnt==10){
cout<<pri[i]<<endl;
cnt=0;
}else{
//区间[M, N]的长度不一定为10的倍数,所以最后一个素数不打印空格
if(i==n-1)cout<<pri[i]<<endl;
else cout<<pri[i]<<" ";
}
}
return 0;
}