POJ 1595 Prime Cuts
来源:互联网 发布:手机学全站仪的软件 编辑:程序博客网 时间:2024/06/17 15:58
题意:输入n,c。如果小于等于n的素数个数为奇数,从中间的素数向两边扩张,输出2*c-1个素数;若为偶数个,输出最中间的2*c个。如果小于等于n的全部素数小于等于2*c 或 2*c-1 ,则输出全部素数。
思路:打两个表,第一个记录素数,第二个记录从1到n素数的个数。然后根据根据素数个数的奇偶输出即可。这题很坑爹的一个地方就是,题目明明说了n<=1000,测试的数据却超了1000!看了discuss,把数组改到1200过了。囧。。。。
AC代码
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<iomanip>#include<algorithm>#include<cmath>using namespace std;int prime[400];int vis[1205];int sum[1205];void get_prime(){ prime[0]=1; memset(vis,0,sizeof(vis)); memset(sum,0,sizeof(sum)); sum[1]=1; int cnt=1; for(int i=2; i<1200; i++) { if(!vis[i]) { sum[i]=sum[i-1]+1; prime[cnt++]=i; for(int j=i*2; j<1001; j+=i) vis[j]=1; } else sum[i]=sum[i-1]; }}int main(){ get_prime(); int n,c,i; while(cin>>n>>c) { cout<<n<<" "<<c<<":"; if(sum[n]%2==0) { if(sum[n]<=2*c) { for(i=0; prime[i]<=n; i++) cout<<" "<<prime[i]; cout<<endl<<endl; } else { int tmp=sum[n]/2; for(i=tmp-c; i<tmp+c; i++) { cout<<" "<<prime[i]; } cout<<endl<<endl;; } } else { if(sum[n]<=2*c-1) { for(i=0; prime[i]<=n; i++) cout<<" "<<prime[i]; cout<<endl<<endl; } else { int tmp=sum[n]/2; for(i=tmp-c+1; i<tmp+c; i++) { cout<<" "<<prime[i]; } cout<<endl<<endl; } } } return 0;}
0 0
- poj 1595 Prime Cuts
- POJ - 1595 《Prime Cuts》
- POJ-1595-Prime Cuts
- POJ 1595 Prime Cuts
- poj 1595 Prime Cuts
- POJ 1595 Prime Cuts
- POJ 1595 -- Prime Cuts
- POJ 1595Prime Cuts
- POJ 1595 Prime Cuts 未完成
- POJ 1595 Prime Cuts 笔记
- zoj 1312 || poj 1595 Prime Cuts
- poj 1595 zoj 1312 Prime Cuts
- poj 1595 Prime Cuts(素数问题)
- POJ 1595 Prime Cuts(素数切)
- POJ 1095 Prime Cuts 素数
- POJ 1595 Prime Cuts 简单素数打表
- POJ 1595 Prime Cuts (ZOJ 1312) 素数打表
- Prime Cuts http://poj.org/problem?id=1595
- android开发如何引用第三方包
- OC语言学习-内存管理
- Oracle误删表的恢复
- 闭包
- 动画和漫画的历史
- POJ 1595 Prime Cuts
- Visual C++内存泄露检测—VLD工具使用说明
- 前5分析软件解决方案
- Linux设备驱动程序(第三版)读书笔记1,hello world
- html中table边框细线
- 常用JS验证函数总结
- android 得到应用列表
- HDU 1201
- UITableView(一)---- 基础