再根據input做相對應output。
1記得也要存,雖然他不是質數 -_-
/* ACM 406
* mythnc
* 2011/10/20 15:50:21
* run time: 0.064
*/
#include <stdio.h>
#define MAXARY 200
#define N 1000
#define NOT_P 0
#define PRIME 1
int prime(int *);
int maxnumber(int *, int, int);
void output(int *, int, int);
int main(void)
{
int n, c, pnumber, ptotal;
int ary[MAXARY];
ptotal = prime(ary);
while (scanf("%d %d", &n, &c) == 2) {
pnumber = maxnumber(ary, n, ptotal);
printf("%d %d:", n, c);
output(ary, pnumber, c);
printf("\n\n");
}
return 0;
}
/* prime: find prime from 1 to 1000, save in s
* return the numbers */
int prime(int *s)
{
int i, j, count, rec;
count = 0;
s[count++] = 1;
s[count++] = 2;
for (i = 3; i < N + 1; i += 2) {
rec = PRIME;
for (j = 3; j * j <= i; j += 2)
if (i % j == 0) {
rec = NOT_P;
break;
}
if (rec == PRIME)
s[count++] = i;
}
return count;
}
/* maxnumber: return the prime number from 1 to n */
int maxnumber(int *s, int n, int max)
{
int i;
for (i = 0; s[i] <= n && i < max; i++)
;
return i;
}
/* output: output result */
void output(int *s, int pnum, int c)
{
int i, mid;
mid = pnum / 2;
/* print all */
if (mid < c)
for (i = 0; i < pnum; i++)
printf(" %d", s[i]);
/* pnum is odd */
else if (pnum % 2 == 1)
for (i = mid - c + 1; i < mid + c; i++)
printf(" %d", s[i]);
/* pnum is even */
else
for (i = mid - c; i < mid + c; i++)
printf(" %d", s[i]);
}
沒有留言:
張貼留言