唯一分解定理

By admin , 4 十一月, 2026

(本文内容由AI生成,请审慎阅读)

任何大于 1 的正整数,都可以唯一写成质数相乘(不计顺序),是数论的基石,和欧几里得算法配套使用。

定理公式

\(n = p_1^{a_1} \cdot p_2^{a_2} \cdots p_k^{a_k}\)

  • \(p_1<p_2<\dots<p_k\):互不相同的质数
  • \(a_1,a_2\dots a_k\):正整数,叫指数
  • 1 约定:没有质因子,是空乘积

例子:\(60=2^2 \times 3^1 \times 5^1\)

📌 三大竞赛推论(必考!)

设 \(n=p_1^{a_1}p_2^{a_2}\dots p_k^{a_k}\)

  1. 约数个数定理

\(d(n)=(a_1+1)(a_2+1)\dots(a_k+1)\) 每个质数可以选 \(0,1\dots a_i\) 次,所以 + 1。 例:60,\((2+1)(1+1)(1+1)=12\) 个正约数。

  1. 约数和定理

\(\sigma(n)=(1+p_1+p_1^2+\dots+p_1^{a_1})\times(1+p_2+p_2^2+\dots+p_2^{a_2})\dots\) 例:\(60=(1+2+4)(1+3)(1+5)=7\times4\times6=168\)

  1. 用分解式求 gcd、lcm \(a=\prod p_i^{x_i},\ b=\prod p_i^{y_i}\)
  • \(\gcd(a,b)=\prod p_i^{\min(x_i,y_i)}\)
  • \(\text{lcm}(a,b)=\prod p_i^{\max(x_i,y_i)}\)

这就是为什么 \(\gcd(a,b)\times \text{lcm}(a,b)=a\times b\)

🐍 Python 模板(试除法分解质因数,竞赛最常用)

思路:从小到大试除,除到不能整除,记录质数和指数;最后如果剩下的 n>1,它本身是质数。

def factor(n):
    res = {}
    i = 2
    while i*i <= n:
        while n % i == 0:
            res[i] = res.get(i,0)+1
            n //= i
        i += 1
    if n > 1:
        res[n] = 1
    return res

# 测试
print(factor(60))  # {2:2,3:1,5:1}

用分解结果求约数个数

def count_div(fac):
    ans = 1
    for exp in fac.values():
        ans *= (exp+1)
    return ans

fac = factor(60)
print(count_div(fac))

⚠️ 竞赛坑点

  1. 试除法只适合单个数分解;要批量分解很多数,改用埃氏筛 / 线性筛(欧拉筛)预处理最小质因子
  2. 注意区分:质数、质因子、指数
  3. 判断完全平方数:所有质因子指数都是偶数
  4. 大数试除会慢;CSP-J 范围内这个试除法足够用

评论

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
请输入"Drupal"
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.