hymdbk

导航

用Java语言实现”质数筛“

设计思路:

1. 开辟标记数组  isPrime[] ,初始默认所有数为质数;

2. 建立空集合  primes  存放已发现质数;

3. 从 2 到 n 逐个遍历数字 i:

(1). i 未被标记 → 是质数,存入  primes ;

(2). 遍历质数列表中的每个质数 p:

- 若 i* p > n,超出范围,直接跳出;

- 标记 i* p 为合数;

- 若 i % p == 0,立刻 break 内层循环;

4. 遍历结束, isPrime  为 true 的下标即为质数。

完成代码实现:
package hellojava;

import java.util.Scanner;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Javaone {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入筛选范围上限:");
int n = sc.nextInt();

List primeList = eulerSieve(n);
System.out.println("1~" + n + " 的质数:");
System.out.println(primeList);
sc.close();
}
public static List eulerSieve(int max) {
List primes = new ArrayList<>();
boolean[] isPrime = new boolean[max + 1];
for (int i = 2; i <= max; i++) {
isPrime[i] = true;
}

for (int i = 2; i <= max; i++) {
if (isPrime[i]) {
primes.add(i);
}
for (int p : primes) {
if (i * p > max) break;
isPrime[i * p] = false;
if (i % p == 0) break;
}
}
return primes;
}
}

运行结果展示:

QQ20260426-164625

posted on 2026-04-26 17:08  忽有眠  阅读(7)  评论(0)    收藏  举报