公式推♂倒题

公式推♂倒题

国内ICPC中经常出现的一类问题!一般会给一个复杂度炒鸡吓人的式子,然后我们需要大力推倒他。把复杂度降到Accepted的范围。

一些前置技能点总结

跳跳狗

\([\frac{n}{i}]\)可以取到的值,个数是\(O(\sqrt n)\)级别的。

int nex=1;
for(int i=1;i<=n;i=nex+1) {
	nex=n/(n/i); // 对于[i,nex]区间内所有数字x,n/x相等。
}

如果需要计算,\(\sum_{i=1}^{n} [\frac{n}{i}]\)这种东西,我们就可以把\([\frac{n}{i}]\)相同的\(i\),放在一起处理。


莫比乌斯函数

这个东西本身上就是容斥吖!一个经典的式子:\(\sum_{d|n} \mu(d) = [n=1]\)

我们,把\(n\)分解质因子拆了\(n=p_1^{a_1}p_2^{a_2}p_3^{a_3}...p_k^{a_k}\)

我们考虑\(n\)的因子\(d\),如果\(\mu(d)\)不为0,那么每个质因子在\(d\)里面的指数,要么是0,要么是1.

如果\(d\)包含奇数个质因子,那么\(\mu(d)=-1\), 否则\(\mu(d)=1\).

  • 所以\(\mu(d)=-1\)\(d\)\(C(k,1)+C(k,3)+....\)个。
  • 所以\(\mu(d)=+1\)\(d\)\(C(k,0)+C(k,2)+....\)个。

根据\((1-1)^k\)二项式定理的展开,当\(n\)不为1时,\(\sum_{d|n} \mu(d)=0\)

当然这个式子是可以进化的。

我们用类似的方法,同样也可以得到\(\sum_{d^2|n} \mu(d) = \mu(n)^2\)

推倒的姿势

姿势1:考虑一下公因子,质因子什么的

按因子统计的问题。出现得相当多了。

栗子1:给出\(n(n\leq2000000)\),计算:

\(\sum_{i=1}^{n} \sum_{j=1}^{n} gcd(i,j)\)

做法:

我们按照gcd分类一下可化成。\(\sum_{g=1}^{n}(g\sum_{i=1}^{n/g}\sum_{j=1}^{n/g} [gcd(i,j)=1])\)

\(f(x)=\sum_{i=1}^{x}\sum_{j=1}^{x} [gcd(i,j)=1] = \sum_{d=1}^{x} \mu(d)(\frac{x}{d})^2\)

\(f(x)\)可以按照\(\frac{x}{d}\)分类,使用跳跳狗来分块计算,复杂度\(O(\sqrt x)\),原式 = \(\sum_{g=1}^{n} g*f(\frac{n}{g})\),按照\(\frac{n}{g}\)的值使用跳跳狗分块计算即可。

栗子2: 2018沈阳网络赛C

做法:

式子可化为\(\sum_{i=1}^{n}\sum_{j=1}^{i} j^2\mu(j)^2 = \sum_{i=1}^{n}\sum_{j=1}^{i}j^2\sum_{d^2|j}\mu(d)\)

交换求和顺序,枚举d,式子可化为\(\sum_{d=1}^{\sqrt n}\sum_{j=1}^{\frac{n}{d^2}}(n-d^2j+1)(d^2j)^2\)

难看死了,整理一下\(\sum_{d=1}^{\sqrt n}[((n+1)d^4\sum_{j=1}^{\frac{n}{d^2}}j^2)-(d^6\sum_{j=1}^{\frac{n}{d^2}}j^3)]\)

中括号里的那个吓死人的东西,其实可以\(O(1)\)计算哎!于是我们就施展开了。

然后注意一下:

  • 首先这个题要用快速乘!
  • 然后\(\frac{x}{y}\%p = \frac{x\%(yp)}{y}\) [很好推的啦!]

栗子3: SDOI2015约数个数和

我们要求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\)

按公因子分类,化为\(\sum_{g=1}^{n}d(g)\sum_{i=1}^{n/g}\sum_{j=1}^{m/g} d(i)d(j)[gcd(i,j)=1]\)

对着\(\sum_{i=1}^{n/g}\sum_{j=1}^{m/g} d(i)d(j)[gcd(i,j)=1]\)施展莫比乌斯反演可转化为一个辣鸡,所以这条路GG了。

真做法:

考虑如下这个式子,\(d(ij)=\sum_{u|i}\sum_{v|j}[gcd(u,v)=1]\)

为什么成立呢?我们考虑质因子\(p\)\(i,j\)中的指数。设\(p\)\(i\)中出现\(a_1\)次,在\(j\)中出现\(a_2\)次,那么\(p\)\(i*j\)的因子中就会有\(a_1+a_2+1\)种选择。然后我们考虑等式右边,当\(gcd(u,v)=1\),设\(u\)\(p\)的指数为\(b_1\)\(v\)\(p\)的指数为\(b_2\),那么\(b_1=0\)或者\(b_2=0\), 合法的有序对\((b_1,b_2)\)共有\(a_1+a_2+1\)个。然后,每种质因子相互独立。所以等式是成立的。

然后这个问题就简单了。不妨设\(n<m\)

原式 = \(\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{u|i}\sum_{v|j} [gcd(u,v)=1]\)

交换求和顺序得 \(\sum_{u=1}^{n}\sum_{v=1}^{m} [\frac{n}{u}] [\frac{m}{v}] [gcd(u,v)=1]\)

施展莫比乌斯反演得\(\sum_{d=1}^{n} \mu(d) \sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\frac{n/d}{i}\frac{m/d}{j} = \sum_{d=1}^{n} \mu(d) (\sum_{i=1}^{n/d}\frac{n/d}{i})(\sum_{j=1}^{m/d}\frac{m/d}{j})\)

施展跳跳狗分块,即可。

栗子4: ZOJ3881

做法:

  • 先观察到\(f(x)\)是积性函数,然后\(g(n)=\sum_{d|n}f(d)\)也是积性函数。
  • \(g(n)=(p_1^{a_1}+1)(p_2^{a_2}+1)(p_3^{a_3}+1).....\) 【喵】
  • 展开\(g(n)\)我们可以发现,\(g(n)=\sum_{d|n} d[gcd(d,n/d)=1]\)
  • \(\sum_{i=1}^{n} g(i) = \sum_{i=1}^{n}\sum_{d|i}d[gcd(d,i/d)=1]\)
  • 按照\(gcd(d,n/d)\)的值,进行容斥有\(\sum_{g=1}^{\sqrt n}\mu(g)\sum_{i=1}^{n/g^2}i*[\frac{n/g^2}{i}]\)
  • 跳跳狗分块即可。复杂度\(O(\sqrt nlog(\sqrt n))\)

【喵】:这个地方,还是打表来得舒适。接下来我们来推一推。

  • 考虑质数\(p\),\(g(p)=p+1\),\(g(p^k)=p^k+1\)
  • 根据积性函数的性质,证完了。【积性函数太好用了!】【口胡.jpg】

姿势2:杜教筛

posted @ 2018-09-12 14:27  RUSH_D_CAT  阅读(182)  评论(0编辑  收藏  举报