hdu1319 Prime Cuts(数论:素数打表,不难但是恶心)
2014-07-13 13:12
323 查看
题目倒是不难,但是处理起来很恶心
之前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代码如下:
之前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; }
相关文章推荐
- 数论知识(1)-------------素数打表
- lightoj-1289(数论+素数打表)
- hdu 1262 寻找素数对 数论 打表。
- Goldbach`s Conjecture (数论,素数打表)
- Help Hanzo (数论(素数(打表进阶(任意段区域打表)))))
- hdu 1262 寻找素数对 数论 打表。
- 数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)
- 理论: 数论(3):素数基础
- 素数打表
- hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)
- HYSBZ 2190 hdoj 2841 2824 《(打表)欧拉和求素数对+队列求1-n中与k互质个数》
- POJ 1181 大整数是否为素数以及求大整数的质因数-数论-(Miller_rabin+Pollard_rho)
- HDU-4548-美素数【打表】
- hdu 1431 素数回文(打表)
- 杭电 4548 美素数 (筛选素数 打表 )
- A -- Alarm(大数打表+数学规律+素数打表)
- pat(B)1007. 素数对猜想(素数打表)
- 素数打表
- Codeforces#385C_素数打表+dp
- 数论部分第一节:素数与素性测试