1013. 数素数 (20)
2016-05-28 00:02
267 查看
1013. 数素数 (20)
时间限制 100 ms内存限制 65536 kB
代码长度限制 8000 B
判题程序 Standard
作者 CHEN, Yue
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
原题地址: 链接
先用以下代码试了一下, 第10000个素数为104729
#include <iostream> #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <cctype> using namespace std; bool is_prime(long long u) { if(u < 2 || (u > 2 && 0 == u % 2)) return false; for(int i = 3; i*i <= u; i += 2){ if(0 == u % i){ return false; } } return true; } void solve() { for(int i = 0, n = 0; ; i ++){ if(is_prime(i)) { n ++; if(n == 10000){ cout << i << endl; break; } } } } int main() { solve(); return 0; }
取最大为110000, 然后利用筛法就可以了, 注意一下输出格式
#include <iostream> #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <cctype> using namespace std; int M, N; void solve() { const int MAX_N = 110000; bool flag[MAX_N]; //flag[i] = true表示i是素数 for(int i = 2; i <= MAX_N; i ++){ flag[i] = true; } for(int i = 2; i*i <= MAX_N; i ++){ if(flag[i]){ for(int j = i*2; j <= MAX_N; j += i){ flag[j] = false; } } } int a[MAX_N], n = 0; for(int i = 2, j = 0; i <= MAX_N; i ++){ if(flag[i]){ j ++; if(j >= M){ a[n ++] = i; if(j == N) break; } } } for(int i = 0; i < n; i ++){ cout << a[i]; if((i + 1) % 10 == 0) cout << endl; else if(i + 1 < n) cout << " "; } } int main() { cin >> M >> N; solve(); return 0; }
相关文章推荐
- zend framework重定向方法小结
- php时间函数用法分析
- PHP引用返回用法示例
- smarty的section嵌套循环用法示例
- php获取一定范围内取N个不重复的随机数
- php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
- round robin权重轮循算法php实现代码
- python自动翻译实现方法
- Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
- sqlserver中几种典型的等待
- MySQL内存及虚拟内存优化设置参数
- 物理层
- 优化mysql之key_buffer_size设置
- OpenGL纹理过滤以及纹理Wrapping mode
- MySQL安全策略(MySQL安全注意事项)
- MYSQL分页limit速度太慢的优化方法
- mysql优化的重要参数 key_buffer_size table_cache
- mysql主键的缺少导致备库hang住
- mysql同步问题之Slave延迟很大优化方法
- 需求文档编写常遇到的问题?怎么破?