题目链接:https://www.luogu.org/problemnew/show/P3383
题意理解
显然是用来验板子的
代码
#include <cstring>
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;
/*
* 素数筛选,判断小于MAXN的数是不是素数。
* notprime是一张表,为false表示是素数,true表示不是素数
*/
const int MAXN = 10000010;
bool notprime[MAXN]; //值为false表示素数,值为true表示非素数
void init(int n) {
memset(notprime, false, sizeof notprime);
notprime[0] = notprime[1] = true;
for(int i = 2;i < n; i++) {
if(!notprime[i]) {
if(i > n/i) {
continue; //防止后面i*i溢出(或者i,j用long long)
}
//直接从i*i开始就可以,小于i倍的已经筛选过了,注意是j+=i
for(int j = i * i;j < n;j += i) {
notprime[j]=true;
}
}
}
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
n += 10;
init(n);
for(int i = 0; i < m; i++) {
int x;
scanf("%d", &x);
if(!notprime[x]) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}