P5736 【深基7.例2】质数筛题解(重置版!)

P5736 【深基7.例2】质数筛

时间限制: 1.00s 内存限制: 125.00MB

题目描述

输入 n 个不大于 10

5

的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。

输入格式

第一行输入一个正整数 n,表示整数个数。

第二行输入 n 个正整数aiaiai

,以空格隔开。

输出格式

输出一行,依次输出 aaa数组中剩余的质数,以空格隔开。

输入输出样例

输入 #1

5

3 4 5 6 7

输出 #1

3 5 7

说明/提示

数据保证,1≤n≤100,1≤a

i

≤10

5

思路

先吹会水

返回之前的题解,发现用的是函数判断,但题目要求用筛法...

也许当时钻空子,数据没那么大,所以这次用筛法

预处理:

先把合数筛掉,剩下的就是质数

cpp 复制代码
for(int i=2;i*i<=1000000;i++){
       if(a[i]==0){//这个数是质数,将这个质数除以别的数,不用合数除,否则就相当于用质数除,如用14除相当于用7除
           for(int j=i+i;j<=1000000;j+=i){
               a[j]=1;
           }//能被i整除的统统"谋杀"
      }
   }

核心代码完毕

AC代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],m;
int main(){
    cin>>n;
    a[1]=1,a[0]=1;
    for(int i=2;i*i<=1000000;i++){
        if(a[i]==0){
            for(int j=i+i;j<=1000000;j+=i){
                a[j]=1;
            }
       }
    }
    for(int i=1;i<=n;i++){
        cin>>m;
        if(a[m]==0){
        	cout<<m<<" ";
        }
    }
    return 0;
}

完结撒花!