#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<cstdio>
#include<iostream>
#include<math.h>
using namespace std;
int ifzhishu(int a){
for(int i = 2; i * i <= a; i++)
if(a % i == 0) return 0;
return 1;
};
int changdu(int a[170],int t){
int j = 0;
for(; j < 170; j++){
if(a[j] > t) break;
}
return j;
};
int main(){
int a,b;
a = b = 0;
int j = 2;
int m[170] = {0};
m[0] = 1;
m[1] = 2;
m[169] = 1001;
for(int i=3; i <= 1000; i += 2) {//因为质数不可能是偶数所以可以直接加2,节约一半时间,但是要记得先把1,2存上
if(ifzhishu(i)) m[j++] = i;//1000以内所有质数存入了数组
}
while(scanf("%d %d",&a,&b) != EOF){
int length = changdu(m,a);
if(length % 2 == 0){
if(2* b > length){
printf("%d %d:",a,b);
for(int i = 0; i < length; i++) {
printf(" %d",m[i]);
}
printf("\n\n");
}
else{
printf("%d %d:",a,b);
int temp = length/2 - b;
for(int i = temp;i < temp + 2 * b; i++) {
printf(" %d",m[i]);
}
printf("\n\n");
}
}
else if(length % 2 != 0){
if(2* b - 1 > length){
printf("%d %d:",a,b);
for(int i = 0; i < length; i++) {
printf(" %d",m[i]);
}
printf("\n\n");
}
else{
printf("%d %d:",a,b);
int temp = length/2 - b + 1;
for(int i = temp; i < temp + 2 * b - 1; i++) {
printf(" %d",m[i]);
}
printf("\n\n");
}
}
}
return 0;
}
1 学到了求质数的节约时间的方法。一个是便利时只需要便利到根号。二是质数除了1,2一定都是都是奇数,可以一次顶加2
2 最后错误还是出在边界。即1000的情况,不过这次很快的检查了出来。