内容来自 b 站
import java.util.Arrays;
import java.util.Scanner;
public class 质数筛 {
static int N = 100000010;
static boolean[] vis = new boolean[N]; // 划掉合数
static int[] prim = new int[N];// 记录质数
static int cnt = 0;// 质数个数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
getPrim(n);
for (int i=1;i<=cnt;i++) {
System.out.print(prim[i] + " ");
}
}
static void getPrim(int n) {
for (int i = 2; i <= n; i++) {
if (!vis[i]) {
prim[++cnt] = i;
}
for (int j = 1; 1L * i * prim[j] <= n; j++) {// 越界中断
vis[i * prim[j]] = true;
if (i % prim[j] == 0) {// 整除中断
break;
}
}
}
}
}
P3383 【模板】线性筛素数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)