首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

判斷 101-200 之間的質數並輸出:Java 實作與優化

     編輯:Java 相關知識

原始碼問題分析

提供的程式碼雖能編譯執行,但存在嚴重邏輯錯誤:

  1. iszhishu 方法判斷條件 x % 2 == 0 永遠只檢查能否被 2 整除,導致所有奇數誤判為質數。
  2. 迴圈上限 i <= x/2 效率低,應優化至 i * i <= x(即 √x)。
  3. 主程式迴圈從 2 開始,但題目要求 101-200。

修正後完整程式碼

public class PrimeFinder {
    public static void main(String[] args) {
        int count = 0;
        System.out.println("101-200 之間的質數有:");
        for (int i = 101; i <= 200; i++) {
            if (isPrime(i)) {
                System.out.printf("%d ", i);
                count++;
                if (count % 10 == 0) System.out.println(); // 每 10 個換行
            }
        }
        System.out.println("\n總共 " + count + " 個質數。");
    }

    /**
     * 判斷質數:試除法優化至 √n
     */
    public static boolean isPrime(int n) {
        if (n < 2) return false;
        if (n == 2) return true;
        if (n % 2 == 0) return false; // 排除偶數
        for (int i = 3; i * i <= n; i += 2) { // 只檢查奇數因子
            if (n % i == 0) return false;
        }
        return true;
    }
}

執行結果

101-200 之間的質數有:
101 103 107 109 113 127 131 137 139 149
151 157 163 167 173 179 181 191 193 197
199

總共 21 個質數。

進階優化方向

  • 埃拉托斯特尼篩法:若需大量區間質數,預先篩選至 200 再切片,時間複雜度 O(N log log N)。
  • Miller-Rabin 概率檢測:適用 64 位整數以上大數質數判斷。
  • 平行化:Java 8+ IntStream.rangeClosed(101, 200).parallel().filter(PrimeFinder::isPrime)... 利用多核心加速。

教學重點總結

  1. 試除法上限取 √n 而非 n/2,大幅減少迴圈次數。
  2. 先排除 2 再以步長 2 檢查奇數,再減半運算量。
  3. 方法職責單一:isPrime 只負責判斷,主程式負責輸出與統計。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved