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
。
思路
先吹会水
返回之前的题解,发现用的是函数判断,但题目要求用筛法…
也许当时钻空子,数据没那么大,所以这次用筛法
预处理:
先把合数筛掉,剩下的就是质数
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代码
#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;
}
完结撒花!
