#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> prime;
const int MAXN = 1e5;
bool IsPrime[MAXN];
// Ver2 : 适用数量级超大的质数判断 (质数筛 是核心中的核心)
// 思想 : 1、用一个辅助数组IsPrime[MAXN],标记每个下标是否为质数
// 2、再用一个可变长度的数组 vector<int> prime 存储所有质数
// (使用vector 需要 #include<vector>)
void IniIsPrime(){ // IniIsPrime() 用来初始化(找出) MAXN 范围内的所有质数
for(int i = 0 ; i < MAXN ; ++i){
IsPrime[i] = true; // 先默认所有位置都是质数
}
IsPrime[0] = false; // 剔除 0 和 1 (不是质数)
IsPrime[1] = false;
for(int i = 2 ; i < MAXN ; ++i){
if(!IsPrime[i]) continue; // 不是质数就跳过
prime.push_back(i); // 是质数就压进(push_bac