在 100 到 200 之間恰好有 21 個質數,而最快列出它們的方法,就是把 N = 200 輸入到一個以埃拉托斯特尼篩法為基礎的產生器中,例如質數產生器,它會回傳完整清單以及質數總數、所有質數的總和、以及找到的最大質數。所謂質數,是指任何大於 1、且其唯一因數只有 1 和本身的整數,因此 100 和 200 本身都不符合資格,而滿足 100 < p ≤ 200 的每一個質數 p 都會被計入。「21 個質數」這個答案是數論中最常被引用的課本事實之一——它一字不差地出現在 CMAT 2017 入學考試的第 83 題——同時它也是快速驗證任何質數產生器是否正常運作的簡便方法。透過這個工具,你還能一鍵確認周圍的錨點:100 以下有 25 個質數(第 25 個質數為 97),而 100 之後的下一組 21 個質數則一路延伸到略低於 200。下面的章節會逐步說明「質數」的真正含義、產生清單的逐步做法、底層演算法,以及這個特定範圍之所以在作業、入學考試和程式練習中反覆出現的實際原因。

how to find prime numbers between 100 and 200
如何找出 100 到 200 之間的質數

什麼算是質數

在向工具詢問 100 到 200 之間的質數之前,先把定義釐清會有幫助。質數是指一個大於 1,且恰好有兩個不同因數(1 和它本身)的整數。最小的質數是 2,它同時也是唯一的偶數質數,因為其他所有偶數都能被 2 整除。數字 1 不是質數——它只有一個因數——而 0 不是質數,因為它沒有任何滿足定義的因數,而且小於 2。

對於 100 到 200 這個範圍,可以直接推出兩個結論。任何以 0、4、6 或 8 結尾的數都是合數,這樣就能在不進一步運算的情況下淘汰超過一半的候選數。任何以 5 結尾的候選數都是 5 的倍數,因此不是質數,其中 5 本身是唯一以 5 結尾的質數。經過這輪快速篩選後,只剩下以 1、3、7 或 9 結尾的數可能是質數,而剩下唯一要做的事,就是檢查是否有任何更小的質數可以整除它們。這正是埃拉托斯特尼篩法自動執行的過濾動作,而同一個過濾動作也正是驅動質數產生器的核心。

使用工具產生 100 到 200 之間的質數

  1. 在瀏覽器中開啟質數產生器。
  2. 選擇「Primes up to N」模式,讓工具列出到達你所輸入上限的所有質數。
  3. 在輸入框中輸入 200——這樣就能涵蓋 100 到 200 範圍內的每一個質數。
  4. 點擊 Generate primes,或直接按下 Enter 鍵。
  5. 閱讀完整清單與清質數、所有質數的總和,以及工具顯示在清單旁邊的最大質數。
  6. 如果想把清單貼到文件或試算表中,點擊複製按鈕即可。

每一步都在瀏覽器中執行,因此不會上傳到任何伺服器,沒有排隊,也沒有每日使用次數限制。在「Primes up to N」模式下,工具接受最高 N = 10,000,000 的數值,這表示你也可以擴大或縮小範圍——例如試試 N = 150 只看下半段,或 N = 300 看質數如何進一步變稀疏——而不必離開頁面。

埃拉托斯特尼篩法如何建立清單

質數產生器是建立在埃拉托斯特尼篩法之上,這個演算法也正是課本題目要求學生手動執行的演算法。概念很簡單:從 2 開始,把你上限以內的所有整數依序寫下來。第一個數字 2 是質數,所以劃掉所有 2 的倍數。接著移到下一個尚未被劃掉的數字 3,將它標記為質數,並劃掉它其餘的倍數。再依序處理 5,然後 7,以此類推,直到抵達上限的平方根為止。經過這一輪篩選後所剩下的數,由於沒有更小的因數,因此都是質數。

到 30 為止的演算範例。從整數 2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30 開始。將 2 標記為質數,並劃掉它的倍數:4、6、8、10、12、14、16、18、20、22、24、26、28、30。接著移到下一個倖存者 3,將它標記為質數,並劃掉它其餘的倍數——9、15、21、27。下一個倖存者是 5;將它標記為質數,並劃掉 25,也就是它在 30 以下唯一剩下的倍數。由於 √30 ≈ 5.48,篩法到此便可以停止。這 10 個倖存者——2、3、5、7、11、13、17、19、23、29——正好就是 30 以下的質數,符合「10 個質數」的錨點。以同樣的程序執行到 200,就能在不對任何數字進行試除的情況下,得到 100 到 200 之間的 21 個質數。這個演算法的執行時間大約是 O(n log log n),這也是為什麼瀏覽器能在不到一秒的時間內,將數百萬的數字完成篩選。

為什麼 100 到 200 這個範圍如此常見

100 到 200 這個區間是數論作業的基本題,因為它剛好跨越最初的 25 個質數——這是每個初學者練習的自然上限——而且在質數開始明顯變稀疏之前就停了下來。它小到可以在合理時間內以手動檢查,又大到足以迫使學生跳過明顯的候選數(以 0、4、6 或 8 結尾的數),進入真正有趣的 1、3、7、9 餘數類別。

除了課本之外,同一個區間也出現在入學考試中。CMAT 2017 第 83 題問考生 100 到 200 之間有多少個質數,官方認可答案是 21,類似的題目在英國、IB 和印度課程體系中反覆出現。程式設計師在需要確定性的測試資料、雜湊表種子或 Project Euler 暖身題時,也會碰到同一個範圍:這個範圍內固定的 21 個質數這份短清單,足以用來壓力測試小型質數判定程式,而不必動用到前 1,000 個質數的全部。

如果你的下一步是把這個範圍內的合數分解成因數——例如檢查為什麼 119、143 或 161 不是質數——質因數分解計算機能以完整的因數樹處理這項工作。對於更大的範圍,質數產生器仍然是最快的途徑,因為它可以一路篩選到 10,000,000,或依需求取出前 100,000 個質數。

用於驗證任何清單的實用質數錨點

人們重新執行質數清單最常見的原因,是為了再次確認自己的成果是否正確。下表彙整了可在幾秒內用來對任何質數產生器——包括本工具——進行健全性檢查的錨點數值。

錨點數值
100 以下的質數25(最大的為 97)
30 以下的質數10
第 25 個質數97
第 100 個質數541
第 1000 個質數7919
第 10,000 個質數104,729
第 100,000 個質數1,299,709
「Primes up to N」模式的最大 N10,000,000
「First N primes」模式的最大 N100,000

這些數值都能一鍵取得:開啟質數產生器,切換到「First N primes」,輸入 25、100、1000、10000 或 100000,工具就會回傳對應的質數。質數定理指出,n 以下的質數個數大約等於 n 除以 n 的自然對數,這說明了為什麼質數會隨著數字變大而逐漸變稀疏,但永遠不會用盡——歐幾里得已經證明質數有無限多個——而像孿生質數(11 與 13,或 17 與 19)這樣的有趣現象,即使深入數線之中也持續出現。

想看更詳細的介紹,請參閱質因數分解方法:工具、樹狀圖與步驟。

想看更詳細的介紹,請參閱如何輕鬆找出質數而無需試除法。