数论基础

整除理论:

  • 唯一分解定理,对于一个合数,唯一存在一种质数分解。
    应用在算法复杂度估计,因子个数的计算。
    素因子个数为 O ( l o g n ) O(log n) O(logn) 级别
    因子个数为 O ( n 3 ) O(\sqrt[3]{n}) O(3n ) ~ O ( n ) O(\sqrt{n}) O(n ) 级别
  • 如果一个数能被一堆数整除,那么这个数被称为这些数的公约数。

裴蜀定理

  • 对于 a , b a,b a,b,存在 x , y x,y x,y 使得 a x + b y = g c d ( a , b ) ax + by = gcd(a, b) ax+by=gcd(a,b)

  • 考虑 b = 0 b = 0 b=0 时,令 x = 1 , y = 0 x = 1, y = 0 x=1,y=0

  • g c d ( a , b ) = a x + b y = b y + ( a % b + a b ∗ b ) x = b ( y + a b ∗ x ) + a % b ∗ x gcd(a,b) = ax+by = by+(a\%b+\frac{a}{b}*b)x=b(y+\frac{a}{b}*x)+a\%b*x gcd(a,b)=ax+by=by+(a%b+bab)x=b(y+bax)+a%bx

同余理论

剩余类:
  • Z Z Z 根据除 M M M 的余数分为 M M M 个不相交的集合

  • 例如余数为 a ( 0 ≤ a < M ) a(0 ≤ a < M) a(0a<M), 则集合为 { k M + a } \{kM+a \} {kM+a}

  • 将此集合记为 [ a ] , a [a] , a [a]a 是一个代表元

  • [ a ] [a] [a] 内和 [ b ] [b] [b] 内的两个数做加法和乘法运算,得到的结果所属剩余类就是 [ a + b ] [a+b] [a+b] [ a b ] [ab] [ab]

  • 所以我们可以将描述放在剩余类内

欧拉定理
  • 定义 φ ( n ) \varphi (n) φ(n) 1   n 1~n 1 n 中与 n n n 互质的数的个数
  • 则有 a φ ( n ) ≡ 1 ( m o d n ) , g c d ( a , n ) = 1 a^{\varphi (n)} ≡ 1 (mod n) , gcd(a, n) = 1 aφ(n)1(modn),gcd(a,n)=1
  • 例如 5 7 ≡ 5 ( m o d 7 ) , 3 4 ≡ 1 ( m o d 10 ) 5^7 ≡ 5 (mod 7) , 3^4 ≡ 1 (mod 10) 575(mod7),341(mod10)
  • 唯一分解 n = p 1 e 1 + p 2 e 2 + . . . + p k e k = ∏ i = 1 k p i e i n=p_1^{e_1}+p_2^{e_2}+...+p_k^{e_k}=\prod_{i=1}^kp_i^{e_i} n=p1e1+p2e2+...+pkek=i=1kpiei
  • φ ( n ) = ∏ i = 1 k ( p i − 1 ) p i e i \varphi (n) = \prod_{i=1}^k(p_i-1)p_i^{e_i} φ(n)=i=1k(pi1)piei
  • 拓展到a与n不互质的情况
    a m ≡ { a m m < φ ( n ) a ( m m o d φ ( n ) ) + φ ( n ) m ≥ φ ( n ) a^m ≡ \begin{cases} a^m & m<\varphi (n) \\ a^{(m mod \varphi (n))+\varphi (n)} & m\geq\varphi (n) \end{cases} am{ama(mmodφ(n))+φ(n)m<φ(n)mφ(n)
  • 只需要考虑 a a a 标准分解中与 n n n 不互质的 p p p
逆元
  • 在数论中引入类似倒数的概念
  • p p p 不为 0 0 0,是否存在 q q q 使得 p q ≡ 1 ( m o d m ) ? pq ≡ 1 (mod m) ? pq1(modm)
  • p , m p,m p,m 互质时存在(由欧拉定理可知)
  • 快速幂计算 q ≡ p φ ( m ) − 1 ( m o d m ) q ≡ p^{\varphi (m)-1} (mod m) qpφ(m)1(modm)
  • 由于很多情况下 m m m 为质数 p p p,此时幂取 p − 2 p-2 p2 即可
  • 拓展欧几里得算法也可以计算
  • 要求很多个怎么办?可以线性递推,不妨令 p = k q + r p=kq+r p=kq+r
    则有 k q + r ≡ 0 ( m o d p ) ⟺ k − 1 ≡ q r − 1 ( m o d p ) kq+r≡0(mod p)⟺k^{-1}≡qr^{-1}(mod p) kq+r0(modp)k1qr1(modp)

同余方程

线性同余方程
  • 考虑 a x ≡ b ( m o d m ) ax ≡ b (mod m) axb(modm)
  • 即有不定方程 a x − m y = b ax − my = b axmy=b
  • 利用拓展欧几里得算法求解
  • 注意:有无解/一解/多解情况
同余方程组
  • 给出多个同余式,求方程组的解
  • 先将各个同余式进行独立求解
  • 模数两两互质:中国剩余定理,利用类似牛顿插值法的方式合并
  • 有模数不互质:最后的模是它们的最小公倍数,用拓展欧几里得两两合并
  • 当然也有无解/一解/多解之分
高次同余方程
  • x k ≡ a ( m o d m ) x^k ≡ a (mod m) xka(modm)
  • s > 0 s>0 s>0 使得 a s ≡ 1 ( m o d m ) a^s ≡ 1 (mod m) as1(modm)
  • 即求 k s ≡ 0 ( m o d φ ( m ) ) ks ≡ 0 (mod \varphi (m) ) ks0(modφ(m))
  • 注意:有无解/一解/多解情况

数论分块

几个引理
  • 整除套整除 a b c = a b c \frac{\frac{a}{b}}{c}=\frac{a}{bc} cba=bca
  • 在所有 n i = k \frac{n}{i}=k in=k i i i 中,最大的是 n k \frac{n}{k} kn
除商的个数
  • 考虑 n 1 , n 2 , n 3 , . . . , n n \frac{n}{1},\frac{n}{2},\frac{n}{3},...,\frac{n}{n} 1n,2n,3n,...,nn
  • 举例: n = 10 n=10 n=10 时有 1 , 2 , 3 , 5 , 10 1,2,3,5,10 1,2,3,5,10
  • k 2 ≤ n < k ( k + 1 ) k^2 ≤ n < k(k+ 1) k2n<k(k+1) 时,有 2 k − 1 2k − 1 2k1
  • k ( k + 1 ) ≤ n < ( k + 1 ) 2 k (k + 1) ≤ n < (k + 1)^ 2 k(k+1)n<(k+1)2 时,有 2 k 2k 2k
  • 不同的值约有 O ( n ) O( \sqrt n) O(n )
除商的值
  • 升序排序 n 1 , n 2 , n 3 , . . . , n n \frac{n}{1},\frac{n}{2},\frac{n}{3},...,\frac{n}{n} 1n,2n,3n,...,nn 中不同的值
  • 前方连续 1 , 2 , … , k 1, 2, … , k 1,2,,k
  • 后方 n k , n k − 1 , n k − 2 , . . . , n 1 \frac{n}{k},\frac{n}{k-1},\frac{n}{k-2},...,\frac{n}{1} kn,k1n,k2n,...,1n
  • 根据引理 2 2 2 可以 O ( 1 ) O(1) O(1) 搞定块长
  • n k \frac{n}{k} kn 值相同的块合并,就是数论分块啦
  • 分块实现
for (int l = 1, r; l <= n; l = r + 1)
{
    r = n / (n / l);
    ans += ...;
}

积性函数

  • 我们称 f : Z + → C f: Z^+ → C f:Z+C 为数论函数
  • 积性函数 ∀ a , b , g c d ( a , b ) = 1 ∀a, b, gcd (a,b) = 1 a,b,gcd(a,b)=1 f ( a ) f ( b ) = f ( a b ) f(a)f(b) = f(ab) f(a)f(b)=f(ab)
  • 完全积性函数 f ( a ) f ( b ) = f ( a b ) f(a)f(b) = f(ab) f(a)f(b)=f(ab)
  • 显然有 f ( 1 ) = 1 f(1) = 1 f(1)=1
  • 欧拉函数 φ ( n ) = ∑ i = 1 n [ g c d ( i , n ) = 1 ] φ(n) = \sum_{i=1}^n[gcd(i,n)=1] φ(n)=i=1n[gcd(i,n)=1]
  • 莫比乌斯函数 μ ( n ) = ( − 1 ) k o r 0 μ(n) = (-1)^kor0 μ(n)=(1)kor0
  • 元函数 e ( n ) = [ n = 1 ] e(n) = [n=1] e(n)=[n=1]
  • 恒等函数 1 ( n ) = 1 1 (n) = 1 1(n)=1
  • 幂函数 i d k ( n ) = n k id^k(n) = n^k idk(n)=nk
  • 除数函数 σ k ( n ) = ∑ d ∣ n d k \sigma_k(n) = \sum_{d|n}d^k σk(n)=dndk
线性筛 or 欧拉筛
  • 回忆小学就讲过的筛法 O ( n l o g n ) O(n log n) O(nlogn),在其过程中,每个数都被其因子访问一遍
  • 在其过程中,每个数都被其因子访问一遍,每个数只被访问了 1 1 1 次,所以 O ( n ) O(n) O(n)
  • 利用线性筛可以求出积性函数的值,考虑 f ( p n ) f(p^n) f(pn) f ( p n − 1 ) f(p^{n-1}) f(pn1) 之间的关系
C o d e : Code: Code:
if (i % pri[j] == 0)
{
    miu[i * pri[j]] = 0;
    phi[i * pri[j]] = phi[i] * pri[j];
    break;
}
else
{
    miu[i * pri[j]] = -miu[i];
    phi[i * pri[j]] = phi[i] * (pri[j]-1);
}
  • 在计算过程中可以引入辅助数组
  • d d d 表示因子个数, c c c 表示最小因子指数
C o d e : Code: Code:
if (i % pri[j] == 0)
{
    c[i * pri[j]] = c[i] + 1;
    d[i * pri[j]] = d[i] / (c[i] + 1) * (c[i] + 2);
    break;
}
else
{
    c[i * pri[j]] = 1;
    d[i * pri[j]] = d[i] * 2;
}
狄利克雷卷积
  • 定义数论函数之间的运算, ( f ∗ g ) ( n ) = ∑ i j = n f ( i ) g ( j ) (f*g)(n)=\sum_{ij=n}f(i)g(j) (fg)(n)=ij=nf(i)g(j)
  • 具有 交换律 结合律
  • 对于两个已知值的数论函数进行狄利克雷卷积,考虑 O ( n l o g n ) O(n log n) O(nlogn) 的筛法,将 n n n 的每个因子对其贡献累计上去即可。
  • 使用线性筛计算 f = μ ∗ μ f = \mu ∗ \mu f=μμ
C o d e : Code: Code:
if (i % pri[j] == 0)
{
    miu[i * pri[j]] = 0;
    m[i * pri[j]] = i / pri[j] % pri[j] == 0 ? 0 : m[i / pri[j]];
    break;
}
else
{
    miu[i * pri[j]] = -miu[i];
    m[i * pri[j]] = -2 * m[i];
}
  • 使用线性筛计算 f = μ ∗ φ f = \mu ∗ \varphi f=μφ
if (i % pri[j] == 0)
{
    mp[i * pri[j]] = i / pri[j] % pri[j] == 0 ? mp[i] * pri[j] : mp[i / pri[j]] * (pri[j] - 1) * (pri[j] - 1);
    break;
}
else
{
    mp[i * pri[j]] = mp[i] * (pri[j] - 2);
}
杜教筛
  • 对于积性函数 f ( n ) f(n) f(n) 和较大的 n ≥ 1 0 8 n ≥ 10^8 n108 我们很难线性计算 S ( n ) = ∑ i = 1 n f ( n ) S(n) = \sum_{i=1}^nf(n) S(n)=i=1nf(n)

  • 找一个 g ( n ) g(n) g(n) 使得 ∑ ( f ∗ g ) ( n ) \sum(f*g)(n) (fg)(n) 尽量好算
    ∑ k = 1 n ∑ i j = k g ( i ) f ( j ) = ∑ i = 1 n ∑ j = 1 n i g ( i ) f ( j ) = ∑ i = 1 n g ( i ) S ( n i ) \sum_{k=1}^n\sum_{ij=k}g(i)f(j) = \sum_{i=1}^n\sum_{j=1}^{\frac{n}{i}}g(i)f(j)=\sum_{i=1}^{n}g(i) S(\frac{n}{i}) k=1nij=kg(i)f(j)=i=1nj=1ing(i)f(j)=i=1ng(i)S(in)

  • 数论分块 + 记忆化
    g ( 1 ) S ( n ) = ∑ i = 1 n ( f ∗ g ) ( i ) − ∑ i = 2 n g ( 1 ) S ( n i ) g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^ng(1)S(\frac{n}{i}) g(1)S(n)=i=1n(fg)(i)i=2ng(1)S(in)

  • 假设对 g ( n ) g(n) g(n) ( f ∗ g ) ( n ) (f*g)(n) (fg)(n) 的求和线性,直接使用杜教筛 T ( n )   O ( n 3 / 4 ) T(n) ~O(n^{3/4}) T(n) O(n3/4),先线性筛前 O ( n 2 / 3 ) O(n^{2/3}) O(n2/3) 项则 T ( n )   O ( n 2 / 3 ) T(n) ~O(n^{2/3}) T(n) O(n2/3)

  • M ( n ) = ∑ i = 1 n μ ( i ) = 1 − ∑ i = 2 n M ( n i ) M(n)=\sum_{i=1}^n\mu(i) = 1-\sum_{i=2}^nM(\frac{n}{i}) M(n)=i=1nμ(i)=1i=2nM(in)

  • ϕ ( n ) = ∑ i = 1 n ϕ ( i ) = n ( n + 1 ) 2 − ∑ i = 2 n ϕ ( n i ) \phi (n) = \sum_{i=1}^n\phi (i)=\frac{n(n+1)}{2}-\sum_{i=2}^n\phi(\frac{n}{i}) ϕ(n)=i=1nϕ(i)=2n(n+1)i=2nϕ(in)

  • B ( n ) = ∑ i = 1 n φ ( i ) = n ( n + 1 ) ( 2 n + 1 ) 6 − ∑ i = 2 n i B ( n i ) B(n)=\sum_{i=1}^n\varphi(i)=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^niB(\frac{n}{i}) B(n)=i=1nφ(i)=6n(n+1)(2n+1)i=2niB(in)

目前就接触了这些,以后又新的再去补充。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值