莫比乌斯反演

PoPoQQQ

提取一些关键的东西:

[F(n)=sum_{d|n}f(d) Rightarrow f(n)=sum_{d|n}mu (d) F({nover d}) ]

[F(n)=sum_{n|d}f(d) Rightarrow f(n)=sum_{n|d}mu ({dover n}) F(d) ]

[n=sum_{d|n} varphi (d) ]

虽然莫比乌斯函数可以线性筛,但是为了写代码的速度,我们可以这样:

mu[1] = 1;
for (int i = 1; i <= n; i++)
  for (int j = i + i; j <= n; j += i)
    mu[j] -= mu[i];

这个正确性可以由这个推出来:

[g(i)=sum_{d|i}mu d=[i==1] ]

就是说只有(i=1)时,(g(i)=1),否则等于(0)

bzoj2440 中山市选2011 完全平方数

小X喜欢的数不妨称作无平方因子数。

我们可以先二分答案(n),然后问题变为:在([1,n])内有多少个无平方因子数。如果使用容斥原理,设(p_i)为第(i)个质数,那么答案为

[n- sum_i frac n { {p_i}^2} + sum_i sum_{j(j eq i)} frac n {(p_i cdot p_j)^2} - ... ]

观察到((p_icdot p_jcdot p_kcdot ...)^2)前面的系数是(mu (p_icdot p_jcdot p_kcdot ...)),所以答案为

[sum_{i=1}^{sqrt n} mu (i) lfloor {frac n {i^2}} floor$$。 还有一个问题,二分答案的范围应该是多少呢? [维基百科](http://zh.wikipedia.org/wiki/%E7%84%A1%E5%B9%B3%E6%96%B9%E6%95%B8%E5%9B%A0%E6%95%B8%E7%9A%84%E6%95%B8)上有说明,但我们取$[1,2k]$足够了。 [bzoj2301 HAOI2011 Problem b](http://www.lydsy.com/JudgeOnline/problem.php?id=2301) ------------- [bzoj2154 Crash的数字表格](http://www.lydsy.com/JudgeOnline/problem.php?id=2154) ---------------- 两道非常经典的题目,第二道题若是多组测试数据,有$O(n)$预处理,$O(sqrt n)$回答的方法。 对于多组测试数据要简化计算的话,我们可以把变量(就是每组询问不同的量)想办法移到最外层,里面的就可以预处理。 学习到的东西 --------- $C(n,0)+C(n,2)+C(n,4)+...=C(n,1)+C(n,3)+C(n,5)+...$。 采用数学归纳法。我们可以考虑杨辉三角的第$i$行,$i=1$时显然成立。假设前$i$都成立,那么第$i$行的每一个数都对第$i+1$为的一个奇数位的数和偶数位的数贡献了一次,所以第$i+1$行也成立。 若$g(x)$是积性函数,那么$f(x) = sum_{i|x} g(x)$也是积性函数。 证明($gcd(x,y)=1$): $$f(x)f(y)=sum_{i|x} g(i) sum_{j|y} g(j)=sum_{i|x} sum_{j|y} g(i)g(j)=sum_{i|x} sum_{j|y} g(i j)]

[f(x)f(y)=sum_{D|x y} g(i j)=f(x y) ]

由于(gcd(x,y)=1),根据(D)的值,我们完全可以推导出(i,j)

注意,不要写成$$f(x)f(y)=sum_{ij|x y} g(ij)=f(x y)$$,这是不对的,因为(i)有可能取到了(y)的因子,(j)取到(x)的因子。

容易出错的地方

一开始另(j=ik),求

[sum_j sum_{i|j} cdots ]

此时不要变成$$sum_j sum_{i|ik} cdots$$

lzh 时空旅行

威尔逊定理可知,答案为:$$sum_{(a_1,a_2,...,a_m)=p}(a_1,a_2,...,a_m)$$,其中(p)是一个质数,这里(mleq 5, a_ileq 4 imes 10^7)(1 leq a_i leq m_i)

(F(i))(i|(a_1,a_2,...,a_m))的数量,(f(i))((a_1,a_2,...,a_m)=i)的数量,通过莫比乌斯反演得:

[f(x)=sum_i mu (i) F(ix)=sum_i mu (i) prod_j frac {m_j} {ix} ]

那么$$answer =sum_k p_k f(p_k)= sum_k p_k sum_i mu(i) prod_j frac {m_j} {p_ki}$$
(p_k)是第(k)个质数。

我们要把(m_j)移出来,所以设(D=p_ki)

[answer=sum_D (prod_j frac {m_j} D)sum_{k,p_k|D}mu (frac D {p_k})p_k ]

现在我们要做的是筛出函数$$G(x)=sum_{k,p_k|x}mu (frac x {p_k})p_k$$
如果直接暴力的话是(O(mlog m))的,会超时。

仔细分析可得:
(y)(x)的最小质因数,分下面三种情况:

  • (y)只有一个,(G(x)=mu(frac x y)y-G(frac x y))
  • (y)有且仅有两个,(G(x)=mu(frac x y)y)
  • otherwise,(G(x)=0),这时不论(p_k)是多少,都有(mu=0)

然后就可以了。

原文地址:https://www.cnblogs.com/wangck/p/4517479.html