HDU1319 Prime Cuts
2016-05-08 18:11
274 查看
问题链接:HDU1319
这是一个比较简单的问题。其关键是需要读懂题意,使用素数筛选法打表,然后进行输出即可。
需要注意的点如下:
1.题目中所说的素数并不是真正的素数,包括1;
2.需要读懂题意,对于输入的n和c,如果1到n之间有偶数个素数则打印2c个数,奇数个素数则打印2c-1个数;
3.打印的数是所有素数中位于中间位置的那些数。
事先还是要做一点功课的,计算一下1到1000之间有多少个素数,避免数组空间过大或过小。
另外,题目虽然说n<=100,但是,至少需要算一个比1000大的素数,以便统计小于n的素数的个数。
本程序逻辑清晰易懂,计算过程参见程序注释。
程序如下:
这是一个比较简单的问题。其关键是需要读懂题意,使用素数筛选法打表,然后进行输出即可。
需要注意的点如下:
1.题目中所说的素数并不是真正的素数,包括1;
2.需要读懂题意,对于输入的n和c,如果1到n之间有偶数个素数则打印2c个数,奇数个素数则打印2c-1个数;
3.打印的数是所有素数中位于中间位置的那些数。
事先还是要做一点功课的,计算一下1到1000之间有多少个素数,避免数组空间过大或过小。
另外,题目虽然说n<=100,但是,至少需要算一个比1000大的素数,以便统计小于n的素数的个数。
本程序逻辑清晰易懂,计算过程参见程序注释。
程序如下:
/* HDU1319 PKU1595 Prime Cuts */ #include <iostream> #include <math.h> using namespace std; #define MAXN 1050 bool isprime[MAXN+1]; int prime[200]; // 修正的Eratosthenes筛选法,根据题意包含1(并非全是素数) void sieveofe(bool isprime[], int prime[], int n) { int i, j; isprime[0] = false; isprime[1] = true; isprime[2] = true; // 初始化 for(i=3; i<=n; i++) { isprime[i++] = true; isprime[i] = false; } int max = sqrt(n); for(i=3; i<=max; i++){ if(isprime[i]) { for(j=i+i; j < n; j+=i) //进行筛选 isprime[j] = false; } } // 将素数放数组prime中,包含1 prime[0] = 1; prime[1] = 2; j = 2; for(i=3; i<=n; i+=2) if(isprime[i]) prime[j++] = i; } int main() { // 筛选素数 sieveofe(isprime, prime, MAXN); int n, c, count, i; int printcount, start, end; // 循环处理输入 while(~scanf("%d%d",&n,&c)) { printf("%d %d:", n, c); // 统计素数个数 count = 0; i = 0; while(prime[i++] <= n) count++; // 计算打印数据的个数 if(count % 2 == 0) { printcount = 2 * c; } else { printcount = 2 * c -1; } // 计算数据的起始与终止位置 if(printcount >= count) { start = 0; end = count - 1; } else { start = (count - printcount) / 2; end = start + printcount - 1; } // 打印结果 for(i=start; i<=end; i++) printf(" %d", prime[i]); printf("\n\n"); } return 0; }
相关文章推荐
- iOS UIKit:CollectionView之设计 (1)
- Visual Studio 2012 AfxMessageBox()使用注意
- 在VisualStudio中远程调试IIS站点
- 数据结构与算法练习-二叉树
- 20145211 《Java程序设计》实验报告五————Java网络编程及安全实验报告
- 求整数段和
- preg_match_6.php
- Robberies
- 关于跨域请求的一些解决方案
- Log4j 介绍
- IO基础笔记
- MVC与WebApi中的异常过滤器
- 反射1
- CGRectInset CGRectOffset UIEdgeInsetsInsetRect
- C++作业5
- STM32F4学习笔记4——外部中断
- 美元符($)是把一个模式锚定到一行的尾端(或串的尾端)
- c++ primer(第五版)学习笔记及习题答案代码版(第六章)函数
- 20145231《Java程序设计》第五次实验报告
- [chrome/chromium]插件 vimium 简单使用