题目倒是不难,但是处理起来很恶心
之前vis数组开小了,WA掉了
给定n c如果1到n之间有奇数个素数
则输出2*c-1个数,保证1-n之间素数的中位数同样为这2*c-1个数的中位数
偶数时,对应输出2*c个数,规则同上
但是如果输出数的最大值超出n,则输出1-n之间所有的素数
我的办法实现找到1-n之间素数的个数num,判断奇偶
若为奇:则输出num/2左侧的c-2个数,右侧的c个数以及num位置对应的数
若为偶:则输出num/2左侧的c-1个数,右侧的c个数以及num位置对应的数
0ms代码如下:
#include <math.h>
#include <string.h>
#include <stdio.h>
int prime[500], vis[1050], cnt;
void gen_primes() {
int i, j;
prime[1] = 1;
cnt = 2;
for(i=2; i<=1010; ++i) {
if(!vis[i]) {
prime[cnt++] = i;
for(j=i+i; j<=1010; j+=i) {
vis[j] = 1;
}
}
}
}
int main(void) {
int n, c, num, i, copy, flag;
gen_primes();
while(scanf("%d%d", &n, &c) != EOF) {
num = 0;
// for(i=1; i<cnt; ++i)
// printf("%d ", prime[i]);
while(prime[++num] <= n);
num--;
flag = 1;
if(num%2) {
flag = 2;
}
printf("%d %d:", n, c);
copy = num/2;
if(copy-(c-flag)<1 || copy+c>num) {
for(i=1; i<=num; ++i) {
printf(" %d", prime[i]);
}
} else {
for(i=copy+flag-c; i<=copy+c; ++i) {
printf(" %d", prime[i]);
}
}
printf("\n\n");
}
return 0;
}
博客内容涉及数论中的素数问题,讲述了如何处理一道关于素数中位数的算法题。作者指出,虽然题目理解不难,但在实际编程实现过程中可能会遇到一些细节处理的挑战,如vis数组大小的设定。解决方案包括根据素数数量的奇偶性,确定输出特定数量的素数,并保证中位数一致。当输出数超过给定范围时,输出所有不超过n的素数。

6249

被折叠的 条评论
为什么被折叠?



