公式推♂倒题
公式推♂倒题
国内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】