题意:
给定一个数字n,将1到n中的所有质数按照中心值为c的规定输出,具体规定题目写得很清楚。
思路:
简单的暴力打表题。
调智能车调得郁闷,找个水题A掉缓冲一下心情,所以这题就这么牺牲了。
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<cmath>
#include<algorithm>
#define llong long long
#define Min(a,b) (a<b?a:b)
#define Max(a,b) (a>b?a:b)
#define Abs(a) ((a)>0?(a):-(a))
#define Mod(a,b) (((a)-1+(b))%(b)+1)
using namespace std;
int n,m;
const int N=1005;
const int inf=99999999;
int has[N];//存储n值对应的prime下表
int prime[N];//存储所有的质数
void solve()
{
int k=1;
prime[k++]=1;
has[1]=1;
for(int i=2;i<=N;i++)
{
bool flag=true;
for(int j=2;j<=sqrt(double(i+1));j++)
{
if(!(i%j))
{
flag=false;
break;
}
}
if(flag)
{
prime[k]=i;
k++;
}
has[i]=k-1;
}
}
int main()
{
solve();
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%d %d:",n,m);
int center=has[n],l,r;
if(center%2==0)
{
center/=2;
l=center-m+1;r=center+m;
}
else
{
center=center/2+1;
l=center-m+1;r=center+m-1;
}
l=Max(l,1);
r=Min(r,has[n]);
for(int i=l;i<=r;i++)
{
printf(" %d",prime[i]);
}
printf("\n\n");
}
return 0;
}