大於 1 的自然數,僅能被 1 與自身整除。1、2、3 為質數。判定邏輯:以 2 至 √n 為除數試除,任一整除即為合數,否則為質數。
using System;
using System.Collections.Generic;
using System.Text;
namespace ExPrimeNumber
{
class PrimeNumber
{
public bool IsPrime(int n)
{
if (n == 1 || n == 2) return true;
int limit = (int)Math.Sqrt(n);
for (int i = limit; i >= 2; i--)
{
if (n % i == 0) return false;
}
return true;
}
static void Main(string[] args)
{
Console.Write("請輸入一個數:");
int n = Convert.ToInt32(Console.ReadLine());
PrimeNumber p = new PrimeNumber();
bool b = p.IsPrime(n);
Console.WriteLine("{0} {1}質數", n, b ? "是" : "不是");
}
}
}
n = a×b,則 a≤√n 或 b≤√n,僅需檢測至平方根。√n 向下檢測,大因數優先發現,合數平均更快判定。n>2 且為偶數直接回傳 false;迴圈步進 2(僅檢測奇數)。i 與 i+2。k 為測試輪數,工程常用(k=10 錯誤率 < 2⁻²⁰)。| 場景 | 推薦方法 |
|---|---|
| n < 10⁹、單次判定 | 試除法 + 6k±1 |
| 批次判定、範圍內所有質數 | 埃拉托斯特尼篩法 / 歐拉篩 |
| 大整數(> 64-bit)、密碼學 | Miller-Rabin (k≥10) |
| 嵌入式/無 BigInteger 環境 | 試除法 + 查表 |