import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class P3383_模板_线性筛素数 {
public static List<Integer> f(int n) {
boolean[] isPrime = new boolean[n + 1];
Arrays.fill(isPrime, true);
List<Integer> primes = new ArrayList<>();
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
primes.add(i);
}
for (int j = 0; j < primes.size() && i * primes.get(j) <= n; j++) {
isPrime[i * primes.get(j)] = false;
if (i % primes.get(j) == 0) {
break;
}
}
}
return primes;
}
public static void main(String[] args) throws IOException {
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
st.nextToken();
int n = (int) st.nval;
st.nextToken();
int q = (int) st.nval;
int[] a = new int[q];
for (int i = 0; i < q; i++) {
st.nextToken();
a[i] = (int) st.nval;
}
var list = f(n);
for (int i = 0; i < q; i++) {
out.write(list.get(a[i] - 1).toString() + "\n");
}
out.flush();
}
}
【洛谷】P3383 线性筛素数(模板)
最新推荐文章于 2024-05-21 10:23:42 发布