【模板】线性筛

核心思想:每个和数都被自己最小的素数因子筛掉。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;

int n,m,p[maxn>>3],cnt;
bool vis[maxn];

void read_and_parse(){
	scanf("%d%d",&n,&m);
	vis[1]=1;
	for(int i=2;i<=n;i++){
		if(!vis[i])p[++cnt]=i;
		for(int j=1;i*p[j]<=n;j++){
			vis[i*p[j]]=1;
			if(i%p[j]==0)break;
		}
	}
}

void solve(){
	int q;
	while(m--){
		scanf("%d",&q);
		puts(vis[q]?"No":"Yes");
	}
}

int main(){
	read_and_parse();
	solve();
	return 0;
}
posted @ 2018-12-06 23:10  shellpicker  阅读(153)  评论(0编辑  收藏  举报