POJ 1595 Prime Cuts (ZOJ 1312) 素数打表
2014-02-07 23:34
387 查看
ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=312
POJ: http://poj.org/problem?id=1595
题目大意:
给你两个数n和c,如果1~n(包括1和n)之间的素数个数为偶数个,则输出中间c*2个素数否则输出中间c*2-1个素数。
思路:
呀呀呀,玩了一天了,A道水题洗洗睡吧。
直接筛选素数打表。
注意c比1~n的个数大的情况要把1~n中所以素数输出。
OK,然后这题1也算素数。。
POJ: http://poj.org/problem?id=1595
题目大意:
给你两个数n和c,如果1~n(包括1和n)之间的素数个数为偶数个,则输出中间c*2个素数否则输出中间c*2-1个素数。
思路:
呀呀呀,玩了一天了,A道水题洗洗睡吧。
直接筛选素数打表。
注意c比1~n的个数大的情况要把1~n中所以素数输出。
OK,然后这题1也算素数。。
#include<cstdio> const int MAXN=1024; bool isprime[MAXN]={0}; int cnt[MAXN]={0}; int prime[MAXN],len; int main() { for(int i=2;i*i<MAXN;i++) { if(!isprime[i]) for(int j=i;j*i<MAXN;j++) isprime[i*j]=true; } len=0; for(int i=1;i<MAXN;i++) { cnt[i]+=cnt[i-1]; if(isprime[i]) continue; cnt[i]++; prime[len++]=i; } int n,c; while(~scanf("%d %d",&n,&c)) { // printf("%d\n",cnt ); printf("%d %d:",n,c); if(c*2> cnt ) //WA在这,题目说的如果超过个数那就输出1~n { for(int i=0;i<cnt ;i++) printf(" %d",prime[i]); } else if(cnt & 1) //odd c*2-1 cnt =a+c*2-1+a -> a=(cnt +1)/2-c { int a=(cnt +1)/2-c; int len=2*c-1; for(int i=0;i<len;i++) printf(" %d",prime[a++]); } else //even c*2 cnt =a+c*2+a -> a=(cnt )/2-c { int a=(cnt )/2-c; int len=2*c; for(int i=0;i<len;i++) printf(" %d",prime[a++]); } printf("\n\n"); } return 0; }
相关文章推荐
- POJ 1595 Prime Cuts (ZOJ 1312) 素数打表
- poj 1595 zoj 1312 Prime Cuts
- POJ 1595 Prime Cuts 简单素数打表
- POJ 1595 Prime Cuts 简单素数打表
- zoj 1312 || poj 1595 Prime Cuts
- POJ 1595 Prime Cuts(我的水题之路——素数取中间区域,准确定位)
- POJ1595_Prime Cuts【素数】【水题】
- poj1595 素数打表
- 打表法之素数打表POJ1595
- POJ 1595 Prime Cuts(素数切)
- POJ 1595 素数打表水题
- poj1595 Prime Cuts (素数筛选)
- POJ1595_Prime Cuts【素数】【水题】
- POJ1595 Prime Cuts [暴力打表]
- (Relax 数论1.11)POJ 1595 Prime Cuts(欧拉筛法: 输出1~n区间中中间的2C个素数)
- POJ 1595 素数打表水题
- poj 1595 Prime Cuts(素数问题)
- poj_2262 素数打表
- poj 2635 素数打表+同余求模定理+千进制
- ZOJ 1951 Goldbach's Conjecture(素数打表)