前言
环境:C++(g++6.5.0)
题目
输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:
输入样例:
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
华点
- 从2开始依次判断素数,记录个数
- 边界问题
代码
/*1013 数素数 (20分)*/
#include <iostream>
#include <cmath>
using namespace std;
int arr[1000];
bool isPrime(int n){
if(n==2||n==3||n==5||n==7) return true;
for(int i=3;i<=sqrt(n);i+=2){
if(n%i==0) return false;
}
return true;
}
int main(){
int M,N;
cin>>M>>N;
int pos=0; //记录下一个需要存储的素数位置 ,从0开始
int count=0; //当前是第几个素数 ,从0开始
int pri=2; //当前素数的大小
while(count<N){
if(isPrime(pri)){
count++;
if(count>=M)
arr[pos++]=pri;
}
if(pri==2) pri++;
else pri+=2;
}
int f=0;
for(int i=0;i<pos;i++){
if(f==0) f++;
else cout<<" ";
cout<<arr[i];
if(i%10==9){
cout<<endl;
f=0;
}
}
return 0;
}