莫比乌斯函数

莫比乌斯函数

对于 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;
            }
        }
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值