题目大意:略 洛谷传送门 鉴于洛谷最近总崩,附上良心LOJ链接
任何形容词也不够赞美这一道神题
$\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}[gcd(i,j)==1][gcd(j,K)==1]$
$\sum\limits_{j=1}^{M}[gcd(j,K)==1]\sum\limits_{i=1}^{N}[gcd(i,j)==1]$
我们先处理右边的式子$\sum\limits_{i=1}^{N}[gcd(i,j)==1]$:
$\sum\limits_{i=1}^{N}\sum\limits_{d|gcd(i,j)}\mu(d)\sum\limits_{j=1}^{M}[gcd(j,K)==1][d|j]$
$\sum\limits_{d=1}^{N}\mu(d)\left \lfloor \frac{N}{d} \right \rfloor \sum\limits_{j=1}^{M}[gcd(j,K)==1][d|j]$
$\sum\limits_{d=1}^{N}\mu(d)\left \lfloor \frac{N}{d} \right \rfloor \sum\limits_{j=1}^{\left \lfloor \frac{M}{d} \right \rfloor}[gcd(jd,K)==1]$
加下来就是比较关键的一个展开式子,[gcd(jd,K)==1]是[gcd(d,K)==1]&[gcd(j,K)==1]的充分必要条件:
$\sum\limits_{d=1}^{N}[gcd(d,K)==1]\mu(d)\left \lfloor \frac{N}{d} \right \rfloor \sum\limits_{j=1}^{\left \lfloor \frac{M}{d} \right \rfloor}[gcd(j,K)==1]$
84分算法:
令$f(n)=\sum\limits_{i=1}^{n}[gcd(i,K)==1]$
这是啥?
欧拉函数$\varphi$啊!别和我一样反演傻了连欧拉函数的定义都忘了
$f(n)=\left \lfloor \frac{n}{K} \right \rfloor \varphi(K) + \sum\limits_{i=1}^{n\;mod\;K}[gcd(i,K)==1]$
预处理出$\varphi(K)$和$\sum\limits_{i=1}^{n}[gcd(i,K)==1]$,那么$f(n)$就能在$O(1)$求得
可$\sum\limits_{i=1}^{n}[gcd(i,K)==1]\mu(d)$就不能用$\varphi$了,但经过计算,$g$数组能在大约$O(n*K的质因子个数)$的时间内处理出来,极限情况也只不超过$2.6 \cdot 10^{7}$
那么这个问题就在$O(n)$的时间内被解决了
蒟蒻的代码写得非常迷就不放了
100分算法:
这是一道神仙题
先放上原式:$\sum\limits_{d=1}^{N}[gcd(d,K)==1]\mu(d)\left \lfloor \frac{N}{d} \right \rfloor \sum\limits_{j=1}^{\left \lfloor \frac{M}{d} \right \rfloor}[gcd(j,K)==1]$
$\sum\limits_{j=1}^{\left \lfloor \frac{M}{d} \right \rfloor}[gcd(j,K)==1]$可以用$84$分算法里的方法预处理,每次$O(1)$得到
现在令$g(N,K)=\sum\limits_{i=1}^{N}[gcd(i,K)==1]\mu(i)$
$=\sum\limits_{i=1}^{N}\mu(i)*\sum\limits_{d|i}\mu(d)$
$=\sum\limits_{d|K}\mu(d) \sum\limits_{i=1}^{N} [d|i]\mu(i)$
$=\sum\limits_{d|K}\mu(d) \sum\limits_{i=1}^{\left \lfloor \frac{N}{d} \right \rfloor} \mu(id)$
关键的部分来了
如果两个数$gcd(x,y)==1$,说明它们没有公共因子,满足积性函数的性质,那么$\mu(xy)=\mu(x)\mu(y)$
反之它们存在公共因子,那么$\mu(xy)$一定等于$0$
利用这个性质
$=\sum\limits_{d|K}\mu(d)^{2} \sum\limits_{i=1}^{\left \lfloor \frac{N}{d} \right \rfloor} [gcd(i,d)==1]\mu(i)$
诶!右面这个东西$\sum\limits_{i=1}^{\left \lfloor \frac{N}{d} \right \rfloor} [gcd(i,d)==1]\mu(i)$,似乎就是$g(\left \lfloor \frac{N}{d} \right \rfloor,d)$啊!
递归求解即可
当$n==0$是,答案就是$0$
发现$K==1$时不能继续递归了否则会死循环,此时
$G(n,1)=\sum\limits_{i=1}^{n} [gcd(i,1)==1]\mu(i)=\sum\limits_{i=1}^{n} \mu(i)$
$n$可能很大,上杜教筛即可
1 #include