ac之大范围的打表

快速查找素数

时间限制: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<iostream>
#include<string.h>
#include<math.h>
using namespace std;
#define MAXN 2000010
int p[MAXN];
bool num[MAXN];
void db()
{
    int pl=0;
    num[0]=num[1]=true;
    for(int i=2;i<MAXN;i++)
    {
        if(!num[i])
        p[pl++]=i;
            for(int j=0;j<pl&&i*p[j]<=MAXN;j++)
            {
               num[i*p[j]]=1;
               if(!(i%p[j]))
                break;
            }
    }
}
int main()
{
    int n;
    db();
    cin>>n;
    while(n>0)
    {
        for(int i=0;p[i]<=n;i++)
        cout<<p[i]<<" ";
            cout<<endl;
            cin>>n;
    }
}

阅读更多

没有更多推荐了,返回首页