您的位置:首页 > 其它

南阳题目187-快速查找素数

2016-02-17 23:08 218 查看


快速查找素数

时间限制:1000 ms | 内存限制:65535 KB
难度:3

描述现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数。

输入给出一个正整数数N(N<=2000000)

但N为0时结束程序。

测试数据不超过100组
输出将2~N范围内所有的素数输出。两个数之间用空格隔开

样例输入
5
10
11
0


样例输出
2 3 5
2 3 5 7
2 3 5 7 11


这个题用普通的方法一一判断是会超时的,所以要用到打表的方法,把小于要求数的所有素数全标记出来!

不过要注意格式!

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int pri[2000008];
void init_prime()
{
int i,j;
for(i=2;i<=sqrt(2000000);i++)
{
if(!pri[i])
{
for(j=i*i;j<=2000000;j+=i)
pri[j]=1;
}
}
}
int main()
{
int num,a,b,i,j;
memset(pri,0,sizeof(pri));
init_prime();
while(scanf("%d",&a),a)
{
printf("2");
for(i=3;i<=a;i++)
if(!pri[i])
printf(" %d",i);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: