🧱

质因数分解

把合数城堡拆回素数积木,拆法只有一种

💡 打个比方

合数就像用素数积木搭起来的城堡。把 36 这座城堡拆开:先拆成 6 和 6,再把每个 6 拆成 2 和 3。最后得到 4 块素数积木:2、2、3、3。

神奇的地方:不管你先拆哪边(36 = 4 × 9 也行),最后拿到的积木永远是一样的。这就是"唯一分解"(第 15 课细讲)。

把合数写成素数连乘的形式,叫质因数分解。例如 36 = 2 × 2 × 3 × 3,其中 2 和 3 是 36 的质因数。

🖼️ 大图看明白

把城堡 36 一层层拆成素数积木 36 拆:36 = 6 × 6 6 6 拆:6 = 2 × 3 拆:6 = 2 × 3 2 3 2 3 叶子节点全是素数积木:2(蓝)和 3(绿) 36 = 2 × 2 × 3 × 3

📏 试除法分解,只要 3 步

  1. 第 1 步:从 2 开始,n 能被 2 整除就一直除,把每个 2 记下来。
  2. 第 2 步:换下一个数 3、4、5……重复"除尽再换",一直试到 i×i > n。
  3. 第 3 步:如果最后剩的数 > 1,它本身就是大质因数,记上。分解完成!
为什么试到 i×i > n 就停?剩下的数如果还有因数,那只能是一个"大质因数"了——因为两个大于 √n 的数相乘会超过 n。所以剩下的大于 1 的数一定是素数。

💻 C++ 怎么写

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int x = n;                     // x 是当前剩下的数
    cout << n << " = ";
    for (int i = 2; i * i <= x; i++) {
        while (x % i == 0) {       // 除尽再换下一个
            cout << i << " × ";
            x /= i;
        }
    }
    if (x > 1) cout << x;          // 剩下的大质因数
    cout << "\n";
    return 0;
}
// 输入 36 → 36 = 2 × 2 × 3 × 3
// 输入 60 → 60 = 2 × 2 × 3 × 5
// 输入 13 → 13 = 13(本身就是素数)

✋ 你来试试

题目 1:60 的质因数分解是什么?
60 = 2 × 30 = 2 × 2 × 15 = 2 × 2 × 3 × 5。质因数是 2、2、3、5。(2 出现 2 次,3 和 5 各 1 次,可以写成 60 = 2² × 3 × 5。)
题目 2:36 可以先拆成 4 × 9,也可以拆成 2 × 18,为什么最终结果一样?
4 = 2×2,9 = 3×3,所以 4×9 的积木是 2,2,3,3;2×18 = 2×2×3×3,积木也是 2,2,3,3。不管先拆哪,素数积木的数量和种类都一样——这就是唯一分解(第 15 课)。分解还是求 GCD/LCM 的备用方法(第 02 课)。
🎯 一句话记住:质因数分解 = 把城堡拆成素数积木,拆法唯一;试除法口诀:2 除尽、换 3、再换 4……剩下的大数必是素数。