博客
关于我
莫比乌斯函数
阅读量:315 次
发布时间:2019-03-04

本文共 3091 字,大约阅读时间需要 10 分钟。

莫比乌斯函数

对于 n ≥ 0 n \geq 0 n0,设数 n n n的唯一分解式为 P 1 ρ 1 P 2 ρ 2 . . . P n ρ n P_1^{\rho_1}P_2^{\rho_2}...P_n^{\rho_n} P1ρ1P2ρ2...Pnρn

μ ( n ) = { 1 n = 1 ( − 1 ) s ρ 1 = ρ 2 = . . . = ρ s = 1 0 ∃ ρ i ≥ 2 \mu(n) = \left\{\begin{array}{rcl} 1 && n=1 \\ (-1)^s && \rho_1=\rho_2=...=\rho_s=1 \\ 0 && \exists \rho_i \geq 2 \end{array}\right. μ(n)=1(1)s0n=1ρ1=ρ2=...=ρs=1ρi2

通俗地讲,莫比乌斯函数就是:

  1. μ ( 1 ) = 1 \mu(1)=1 μ(1)=1

  2. n n n存在平方因子, μ ( n ) = 0 \mu(n)=0 μ(n)=0

  3. n n n是奇数个不同素数之积, μ ( n ) = − 1 \mu(n)=-1 μ(n)=1

  4. n n n是偶数个不同素数之积, μ ( n ) = 1 \mu(n)=1 μ(n)=1

性质

  • 性质一:莫比乌斯函数是积性函数。若 g c d ( n , m ) = 1 gcd(n,m)=1 gcd(n,m)=1,则 μ ( n m ) = μ ( n ) μ ( m ) \mu(nm)=\mu(n)\mu(m) μ(nm)=μ(n)μ(m)

    证明:对 n , m n,m n,m唯一分解然后分类讨论即可

  • 性质二:设 n ≥ 1 n \geq 1 n1 d ∣ n d | n dn d d d n n n的因子)

    ∑ d ∣ n μ ( d ) = [ 1 n ] = { 1 n = 1 0 n ≥ 2 \sum_{d|n}\mu(d) = [\frac{1}{n}] = \left\{\begin{array}{rcl} 1 && n=1 \\ 0 && n \geq 2 \end{array}\right. dnμ(d)=[n1]={

    10n=1n2

    证明: n = 1 n=1 n=1时显然满足;设 n ≥ 2 n \geq 2 n2,数 n n n的唯一分解式为 P 1 ρ 1 P 2 ρ 2 . . . P s ρ s P_1^{\rho_1}P_2^{\rho_2}...P_s^{\rho_s} P1ρ1P2ρ2...Psρs d d d的唯一分解式为 P 1 α 1 P 2 α 2 . . . P s α s P_1^{\alpha_1}P_2^{\alpha_2}...P_s^{\alpha_s} P1α1P2α2...Psαs。根据莫比乌斯函数的定义和积性函数的性质可以得出:

    ∑ d ∣ n μ ( d ) = ∑ α 1 = 1 0 ∑ α 2 = 1 0 . . . ∑ α s = 1 0 μ ( P 1 α 1 P 2 α 2 . . . P s α s )                   = ∑ 1 0 μ ( P 1 α 1 ) ∑ 1 0 μ ( P 2 α 2 ) . . . ∑ 1 0 μ ( P s α s ) \sum_{d|n}\mu(d) = \sum_{\alpha_1=1}^0\sum_{\alpha_2=1}^0...\sum_{\alpha_s=1}^0 \mu(P_1^{\alpha_1}P_2^{\alpha_2}...P_s^{\alpha_s}) \\ ~~~~~~~~~~~~~~~~~=\sum_1^0\mu(P_1^{\alpha_1})\sum_1^0\mu(P_2^{\alpha_2})...\sum_1^0\mu(P_s^{\alpha_s}) dnμ(d)=α1=10α2=10...αs=10μ(P1α1P2α2...Psαs)                 =10μ(P1α1)10μ(P2α2)...10μ(Psαs)

    对于某一项 ∑ 1 0 μ ( P t α t ) = 1 + ( − 1 ) = 0 \sum_1^0\mu(P_t^{\alpha_t})=1 + (-1) = 0 10μ(Ptαt)=1+(1)=0,那么所有项乘起来仍为 0 0 0,原式得证。

  • 性质三: ∑ d ∣ n μ ( d ) d = φ ( n ) n \sum_{d|n}\frac{\mu(d)}{d}= \frac{\varphi(n)}{n} dndμ(d)=nφ(n)

    证明参见莫比乌斯反演关于 φ ( n ) = ∑ d ∣ n μ ( d ) n d \varphi(n) = \sum_{d|n}\mu(d)\frac{n}{d} φ(n)=dnμ(d)dn的证明

求莫比乌斯函数

求单个数

int getMu(int n) {       if (n == 1) return 1;    int m = sqrt(n + 0.5), cnt = 0;    for (int i = 2; i <= m; i++) {           if (n % i == 0) {               if (n % (i * i) == 0) return 0;            n /= i;            cnt++;        }    }    if (n > 1) cnt++;    return cnt & 1 ? -1 : 1;}

线性筛选

i % p r i m e [ j ] ! = 0 i\%prime[j]!=0 i%prime[j]!=0,代表 i i i中不含该质因子,也就是说乘上该质因子后恰好会多出一个系数为 1 1 1质因子,因此 μ ( i ∗ p r i m e [ j ] ) = − μ ( i ) \mu(i*prime[j])= - \mu(i) μ(iprime[j])=μ(i)

否则代表含有该质因子且系数会大于等于 2 2 2,那么 μ ( i ∗ p r i m e [ j ] ) = 0 \mu(i*prime[j])=0 μ(iprime[j])=0

bool isprime[maxn];int mu[maxn], prime[maxn];void initMu() {       mu[1] = 1;    int cnt = 0;    for (int i = 2; i < maxn; i++) {           if (!isprime[i]) prime[cnt++] = i, mu[i] = -1;        for (int j = 0; j < cnt && i * prime[j] < maxn; j++) {               isprime[i * prime[j]] = 1;            if (i % prime[j]) mu[i * prime[j]] = -mu[i];            else {                   mu[i * prime[j]] = 0;                break;            }        }    }}

转载地址:http://tjqq.baihongyu.com/

你可能感兴趣的文章
LeetCode:100. Same Tree相同的树(C语言)
查看>>
【个人网站搭建】GitHub pages+hexo框架下为next主题添加分类及标签
查看>>
GDB命令—jump/return/call/disassemble
查看>>
java基础--继承
查看>>
java基础--java内部类
查看>>
fastjson 反序列化源码解析
查看>>
按位与、或、非、异或总结
查看>>
TCP心跳检测包
查看>>
01 背包问题
查看>>
JVM - 参数配置影响线程数
查看>>
idea如何导入一个maven项目
查看>>
在 springboot 项目中全局处理异常
查看>>
ILI9341几个重要的命令
查看>>
AD如何对原理图进行注释
查看>>
力扣:地图分析(多源bfs)
查看>>
NC15136: 迷宫
查看>>
动态点击a标签
查看>>
@RequestBody和@RequestParam
查看>>
oracle创建序列语法
查看>>
springboot通过控制层跳转页面404
查看>>