标签:des style io os ar for 数据 div sp
South Central USA 1996
题目大意:给你两个数N和C,算出1~N(包括N)之间的素数序列,
若素数个数为奇数,则输出素数序列中心的2*C-1个素数。
若素数个数为偶数,则输出素数序列中心的2*C个素数。
输出个数中说若C>素数个数,则输出整个素数序列。
思路:筛法求素数打表,之后求出素数序列的中心位置,判断奇偶并输出
注意:此题中,1被当做了质数(只限本题),数据规模开成1000是不够
的,需要开成1100,应该是测试数据超范围了。
#include<stdio.h>
int Prime[1100],PrimeNum[1100];
int IsPrime()
{
for(int i = 1; i <= 1100; i++)
Prime[i] = 1;
for(int i = 2; i <= 1100; i++)
{
for(int j = i+i; j <= 1100; j+=i)
Prime[j] = 0;
}
int num = 1;
for(int i = 0; i <= 1100; i++)
if(Prime[i])
PrimeNum[num++] = i;
return num;
}
int main()
{
int num = IsPrime();
int N,C,pos;
while(~scanf("%d%d",&N,&C))
{
pos = 0;
for(int i = 1; i < num; i++)
{
if(N >= PrimeNum[i] && N < PrimeNum[i+1])
{
pos = i;
break;
}
}
printf("%d %d:",N,C);
if(C > pos && pos%2==0)
C = pos/2;
else if(C > pos)
C = (pos+1)/2;
if(pos%2 == 1)
{
for(int i = (pos-(C*2-1))/2+1; i <= (pos-(C*2-1))/2+C*2-1; i++)
printf(" %d",PrimeNum[i]);
printf("\n\n");
}
else
{
for(int i = (pos-C*2)/2+1; i <= (pos-C*2)/2+C*2; i++)
printf(" %d",PrimeNum[i]);
printf("\n\n");
}
}
return 0;
}标签:des style io os ar for 数据 div sp
原文地址:http://blog.csdn.net/lianai911/article/details/39392495