计蒜客 难题题库 145 简单素数筛法
2015-08-10 10:00
267 查看
2324次
35.7%
1000ms
65536K
小度机器人最近正在添加功能,Robin希望小度机器人可以告诉他从1到N( 1 < N <= 10000)有多少个素数。请你来帮帮他吧?
输入包括一行,仅一个数字N。
输出在(1, N]区间内的所有的素数。
提示:想像将(1, N]的数字看成沙子和小石头,视非素数为沙子,视素数为小石头。将沙子筛走,剩下的就是小石头了。考虑到N最大也就是10000,你可以开一个长度为10000的数组,让数组元素的值作为筛去与否的标志,比如筛去以后让元素值为1,然后依次输出就可以了。当然,如果你有更好的办法,也可以试试哦!
输出:
35.7%
1000ms
65536K
小度机器人最近正在添加功能,Robin希望小度机器人可以告诉他从1到N( 1 < N <= 10000)有多少个素数。请你来帮帮他吧?
输入包括一行,仅一个数字N。
输出在(1, N]区间内的所有的素数。
提示:想像将(1, N]的数字看成沙子和小石头,视非素数为沙子,视素数为小石头。将沙子筛走,剩下的就是小石头了。考虑到N最大也就是10000,你可以开一个长度为10000的数组,让数组元素的值作为筛去与否的标志,比如筛去以后让元素值为1,然后依次输出就可以了。当然,如果你有更好的办法,也可以试试哦!
样例1
输入:8
输出:
2 3 5 7
#include<iostream> using namespace std; const int maxn = 10001; bool isPrime[maxn]; void init(){ int i, j; isPrime[2] = 1; for(i = 3; i < maxn; i += 2){ isPrime[i] = 1; } for(i = 3; i < maxn; ++i){ if(isPrime[i]){ for(j = i * 2; j < maxn; j += i){ isPrime[j] = 0; } } } } int main(){ init(); int n; cin >> n; for(int i = 2; i <= n; ++i){ if(isPrime[i]){ cout << i << endl; } } }
相关文章推荐
- cout,printf等无控制台输出
- MySQL数据库连接池八小时失效问题
- Ajax+SQL Server无刷新实现图片切换特效
- JQuery图片延迟加载插件,动态获取图片长宽尺寸
- 太在乎一个人,往往。。。
- QT5 QString
- linux下的文件权限与目录配置
- 计算机开机过程(详细)
- 计蒜客 难题题库 144 非递归二叉树的中序遍历
- hihocoder 1032 manachar 求回文串O(n)
- POJ 2492 A Bug's Life 并查集
- ZigZag Conversion
- Junit单元测试AndroidManifest.xml中的权限添加
- iOS开发项目实战——Swift实现ScrollView滚动条功能
- CoreMotion框架中加速度计使用简明教程
- malloc(sizeof(char *)*n)模型
- iOS平台XML解析类库对比和安装说名
- LASSOS方程--图像降噪
- 计蒜客 难题题库 143 连续正整数
- 线程之生产者消费者模型