题目1013 数素数
令 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
思路
看到题目后第一个想法就是利用前面做过的判断素数的函数,找到第a个素数后开始按要求输出第a个~第b个素数。
代码
#include <iostream>
using namespace std;
bool isprime(int k){
for(int i = 2; i*i<= k; i++)
if(k%i == 0) return false;
return true;
}
int main(){
int a, b;
int n = 2, cnt = 0;
while(cin >> a >> b){
while(cnt < a-1){
if(isprime(n++)){//n为需要遍历的每一个数,不管是否为素数都要自增
cnt++;
}
}
while(cnt < b){
if(isprime(n)){
if(cnt == b-1) cout << n;
else if((cnt-a)%10 == 8){//每十个换行
cout << n << endl;
}
else cout << n << " ";
cnt++;
}
n++;//注意位置
}
}
return 0;
}
总结
刚开始n++的位置放置错误导致了死循环,以及在思考如何每十个换行时花费时间较久,思路不清晰,万幸AC,每次做完自己潦草的解法后,记得寻找更优算法向大佬学习。