题目:给你2个数n,C,确定,不超过n的素数的中间的一个范围。 定义[1,n]上有k个素数。
则k为奇数,输出中间的2*k-1个;k为偶数,输出中间的2*k个。
分析:数论。直接打表计算所有的0-1000的素数,然后求中线向两边找端点即可。
说明:在本题中1是素数。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
int used[1001];
int prim[1001];
int main()
{
memset( used, 0, sizeof(used) );
int count = 0;
prim[count ++] = 1;
for ( int i = 2 ; i <= 1000 ; ++ i )
if ( !used[i] ) {
prim[count ++] = i;
for ( int j = i<<1 ; j <= 1000 ; j += i )
used[j] = 1;
}
prim[count] = 1001;
int n,m;
while ( ~scanf("%d%d",&n,&m) ) {
printf("%d %d:",n,m);
int r = 0;
while ( prim[r+1] <= n ) r ++;
int mid = r/2;
int l = mid;
r = mid+(r%2);
while ( -- m ) {
l --; r ++;
if ( l < 0 ) l ++;
if ( prim[r] > n ) r --;
}
while ( l <= r )
printf(" %d",prim[l ++]);
printf("\n\n");
}
return 0;
}