經典 C 語言練習題:輸出 1 到 100 之間所有能同時被 4 和 6 整除的數字。本文提供最佳化解法並解析數學原理。
能同時被 4 和 6 整除 ⇔ 能被 LCM(4, 6) = 12 整除。
因此問題轉化為:輸出 1-100 間所有 12 的倍數。
#include <stdio.h>
int main() {
// 直接從 12 開始,每次遞增 12,無需判斷除法
for (int i = 12; i <= 100; i += 12) {
printf("%d ", i);
}
return 0;
}
12 24 36 48 60 72 84 96
| 方法 | 時間複雜度 | 優點 | 缺點 |
|---|---|---|---|
| 暴力法 (1-100 逐一判斷 %4==0 && %6==0) | O(n) | 直觀易懂 | 執行 100 次模運算,效率低 |
| LCM 步進法 (i += 12) | O(n/12) | 零除法運算、極速、程式碼最簡潔 | 需理解 LCM 數學概念 |
此技巧適用於所有「同時能被多數整除」問題:
善用數學性質 (LCM) 將「判斷問題」轉化為「生成問題」,是演算法優化的經典思維。這不僅能寫出更高效的代碼,更能培養數學與程式結合的解題直覺。