杰瑞科技汇

Java如何高效求1到100的素数?

Java求1到100的素数

以下是几种在Java中找出1到100之间所有素数的实现方法:

简单试除法

public class PrimeNumbers {
    public static void main(String[] args) {
        System.out.println("1到100之间的素数有:");
        for (int i = 2; i <= 100; i++) {
            if (isPrime(i)) {
                System.out.print(i + " ");
            }
        }
    }
    // 判断一个数是否为素数
    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

埃拉托斯特尼筛法(更高效)

import java.util.Arrays;
public class SieveOfEratosthenes {
    public static void main(String[] args) {
        int n = 100;
        boolean[] isPrime = new boolean[n + 1];
        Arrays.fill(isPrime, true);
        // 0和1不是素数
        isPrime[0] = isPrime[1] = false;
        for (int i = 2; i * i <= n; i++) {
            if (isPrime[i]) {
                // 将i的倍数标记为非素数
                for (int j = i * i; j <= n; j += i) {
                    isPrime[j] = false;
                }
            }
        }
        // 输出素数
        System.out.println("1到100之间的素数有:");
        for (int i = 2; i <= n; i++) {
            if (isPrime[i]) {
                System.out.print(i + " ");
            }
        }
    }
}

优化后的试除法

public class OptimizedPrimeCheck {
    public static void main(String[] args) {
        System.out.println("1到100之间的素数有:");
        for (int i = 2; i <= 100; i++) {
            if (isPrimeOptimized(i)) {
                System.out.print(i + " ");
            }
        }
    }
    // 优化后的素数判断
    public static boolean isPrimeOptimized(int num) {
        if (num <= 1) return false;
        if (num <= 3) return true;
        if (num % 2 == 0 || num % 3 == 0) return false;
        // 检查6k±1形式的数
        for (int i = 5; i * i <= num; i += 6) {
            if (num % i == 0 || num % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }
}

输出结果

所有方法都会输出相同的结果:

1到100之间的素数有:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

方法比较

  1. 简单试除法:最容易理解,但对于大数效率较低
  2. 埃拉托斯特尼筛法:对于找出一定范围内的所有素数非常高效
  3. 优化后的试除法:在判断单个数是否为素数时效率较高,特别是对于大数

对于1到100这样的小范围,任何方法都可以满足需求,如果需要处理更大的范围,建议使用筛法或优化后的试除法。

分享:
扫描分享到社交APP
上一篇
下一篇