質數(Prime)是大於 1 的自然數,除 1 和自身外無其他因數。判斷 n 是否為質數:檢查 2 到 √n 是否有因數,有則為合數,否則為質數。
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool isPrime(unsigned int n) {
if (n <= 1) return false; // 0, 1 非質數
if (n <= 3) return true; // 2, 3 是質數
if (n % 2 == 0 || n % 3 == 0) return false; // 排除 2, 3 的倍數
// 6k ± 1 優化:所有質數(>3)形式為 6k±1
for (unsigned int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
int main() {
unsigned int n;
printf("請輸入要判斷的數字: ");
scanf("%u", &n);
printf("%s\n", isPrime(n) ? "Prime" : "Not Prime");
return 0;
}
i 和 i+2。i*i <= n: 避免 sqrt() 浮點運算與精度問題,整數乘法更快。unsigned int: 擴展正數範圍,語義更清晰。| 指標 | 數值 |
|---|---|
| 時間複雜度 | O(√n / 3) ≈ O(√n) |
| 空間複雜度 | O(1) |
| 適用範圍 | 32 位無號整數(< 42.9 億)即時判斷 |