POJ 1595 && HDU 1319 Prime Cuts(数论)
2015-08-25 10:40
323 查看
Description
给定你一个数n,让你求出1-n内有多少个素数,再给你一个数d,如果2*d大于素数的个数则全部输出;否则,如果个数为单数,输出2*d-1个并且以中间那个素数为中心分别向两边输出d-1个;如果偶数个,输出2*d个,也是以中间那个素数为中心向两边扩展
Input
多组输入,每组用例包括两个数n和d,以文件尾结束输入
Output
对于每组用例,按题目要求输出对应素数,每组用例后加一空行
Sample Input
21 2
18 2
18 18
100 7
Sample Output
21 2: 5 7 11
18 2: 3 5 7 11
18 18: 1 2 3 5 7 11 13 17
100 7: 13 17 19 23 29 31 37 41 43 47 53 59 61 67
Solution
先用筛选法生成大范围内的素数,关键要注意输出的要求
Code
给定你一个数n,让你求出1-n内有多少个素数,再给你一个数d,如果2*d大于素数的个数则全部输出;否则,如果个数为单数,输出2*d-1个并且以中间那个素数为中心分别向两边输出d-1个;如果偶数个,输出2*d个,也是以中间那个素数为中心向两边扩展
Input
多组输入,每组用例包括两个数n和d,以文件尾结束输入
Output
对于每组用例,按题目要求输出对应素数,每组用例后加一空行
Sample Input
21 2
18 2
18 18
100 7
Sample Output
21 2: 5 7 11
18 2: 3 5 7 11
18 18: 1 2 3 5 7 11 13 17
100 7: 13 17 19 23 29 31 37 41 43 47 53 59 61 67
Solution
先用筛选法生成大范围内的素数,关键要注意输出的要求
Code
#include<stdio.h> #define min(x,y) (x<y?x:y) #define max(x,y) (x>y?x:y) int main() { int pri[1000],i,j,flag,res,n,m; pri[1]=1; pri[2]=2; res=3; for(i=3;i<=1101;i+=2)//打表 { flag=1; for(j=2;j<=(i+1)/2;j++) if(i%j==0) flag=0; if(flag)//记录素数下标 pri[res++]=i; } while(scanf("%d%d",&n,&m)!=EOF) { printf("%d %d:",n,m); for(i=1;pri[i]<=n;i++);//找到n内的素数个数 res=i; if(res%2==0)//偶数个素数 for(i=max(res/2-m+1,1);i<min(res/2+m,res);i++) printf(" %d",pri[i]); else//奇数个素数 for(i=max((res+1)/2-m,1);i<min((res+1)/2+m,res);i++) printf(" %d",pri[i]); printf("\n\n");//按格式输出 } }
相关文章推荐
- hdu 1671
- Servlet的response输出到页面时乱码的解决方法
- Linux中常用操作命令
- PHPExecl操作
- java ubantu
- Java NIO 为什么比IO快
- Linux(Ubuntu)下MySQL的安装与配置
- block 深入理解
- JavaScript中通过getElementsByName访问name集合对象
- CNN+RNN
- Mysql主从服务器原理及配置
- 最长公共子串、最长公共子序列、最长回文子串、模式匹配、最大子序列--字符串问题整理
- 好的博客
- iOS开发系列--地图与定位
- 开发笔记-PHP-CI
- 常规功能和模块自定义系统(cfcmms)—001序言
- 前端图片延迟加载详细讲解
- 如何设置UISwitch的大小
- 微信开发中mysql字符编码问题
- 归并排序Merge Sort LinkedList in Java