输出超限如何解决?
素数
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
素数就是只能被它自己和1整除的数。在这次的问题里,你需要删减出在1到N(包括N)的素数里的一些素数。你的程序要读入一个数N,决定素数段的长度然后如果中间有偶数个素数,输出中间C×2个,如果中间有奇数个素数,输出中间(C×2-1)个。
输入:
输入数据的每一行有两个数字,第一个数字(1<=N<=1000)表示要求的素数段在1和N之间。第二个数字(1<=C<=N)表示要求偶数情况下要输出的中间C×2个;或奇数情况下要输出的(C×2-1)个。
输出:
对于每一组输入的数据,你都要输出N,一个空格,C,一个冒号(:),然后是以上定义的要输出的素数列。如果要输出的素数数目多于时间有的素数,就输出所有的素数。每个数前面有一个空格。
输入样例:
21 2
18 2
18 18
100 7
输出样例:
21 2: 5 7 11
18 2: 3 5 7 11
18 18: 1 2 3 5 7 11 13 17
100 7: 13 17 19 23 29 31 37 41 43 47 53 59 61 67
提示:
来源:
2006西北工业大学程序设计竞赛决赛题B
我的代码:
#include<stdio.h>
#include<math.h>
int main()
{
int n,c,a[1000],i,j,k,p;
scanf("%d%d",&n,&c);
while(1)
{
k=0;
if(n==1)
printf("%d %d: 1\n",n,c);
else if(n==2)
printf("%d %d: 2\n",n,c);
else
{
for(i=3; i<=n; i+=2)
{
for(j=2; j<=sqrt(i)+1; j++)
{
if(i%j==0)
break;
}
if(j>sqrt(i)+1)
a[k++]=i;
}
if(k%2==0)
{
printf("%d %d:",n,c);
if(c*2<=k)
{
for(p=(k-c*2)/2-1; p<k/2+c-2; p++)
printf(" %d",a[p]);
printf(" %d\n",a[p]);
}
else
{
for(p=0; p<k-1; p++)
printf(" %d",a[p]);
printf(" %d\n",a[p]);
}
}
else
{
printf("%d %d:",n,c);
if(c*2-1<=k)
{
for(p=(k-c*2+1)/2-1; p<(k-1)/2+c-2; p++)
printf(" %d",a[p]);
printf(" %d\n",a[p]);
}
else
{
for(p=0; p<k-1; p++)
printf(" %d",a[p]);
printf(" %d\n",a[p]);
}
}
}
scanf("%d%d",&n,&c);
}
}
这个循环无法结束,出现输出超限,如何解决?还有就是这道题的输出样例怎么把1也作为素数了?