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)。
小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)。
然后就可以了。