《莫比乌斯函数求解gcd问题》
参考自:https://www.luogu.com.cn/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi
对于莫比乌斯函数gcd的问题:
可以有$|gcd(i,j) = 1| = \sum_{d|gcd(i,j)}^{} \mu (d) ( n < m)$
可以由莫比乌斯函数的原型推得,具体不推了,很简单的代换。
那么就可以求解$\sum_{i = 1}^{n}\sum_{j = 1}^{m} |gcd(i,j) = 1|$
我们把上面的那个公式代入,即可得$\sum_{i = 1}^{n}\sum_{j = 1}^{m} \sum_{d | gcd(i,j)}^{}\mu (d)$
这里我们再进一步化简,显然我们可以考虑枚举d,d - [1,n]
那么,因为gcd(i,j)要是d的倍数,那么说明i,j都是d的倍数,即可得$\sum_{d = 1}^{n} \sum_{d | i}^{}\sum_{d | j}^{}\mu (d)$
考虑进一步化简,因为在1 ~ n内,满足是d的倍数的数只有n / i个,在1 ~ m内,满足是d的倍数的数只有m / i个。
所以可以变换得到$\sum_{d = 1}^{n}\mu (d) * [\frac{n}{d}] * [\frac{m}{d}]$
至此,我们可以做到O(n)的复杂度了。
但是我们看后面的式子,很显然就是一个整除分块。
所以我们可以去优化后面的乘积为整除分块。
对于两个块,我们右边界取小的,保证两个块大小一致,然后两个块里的元素分别为n / L和m / L。
即可O($\sqrt{n}$)做出。
然后前面的其实就是一个莫比乌斯函数的前缀和,可以用杜教筛O($\sqrt{n}$)求出。
这样最终可以优化到O($\sqrt{n}$)来求出解。
求解:$\sum_{i = 1}^{n}\sum_{j = 1}^{m}|gcd(i,j) = k|(n < m)$
我们除去一个k得,$\sum_{i = 1}^{[\frac{n}{k}]}\sum_{j = 1}^{[\frac{m}{k}]}|gcd(i,j) = 1|(n < m)$
那么就和上面那个递推一样了。
求解:$\sum_{i = 1}^{n}\sum_{j = 1}^{m}i * j * |gcd(i,j) = k|$
同理,除以k可得$\sum_{i = 1}^{[\frac{n}{k}]}\sum_{j = 1}^{[\frac{m}{k}]}\frac{i}{k} * \frac{j}{k} * |gcd(i,j) = 1|$
化简得$\sum_{i = 1}^{[\frac{n}{k}]}\sum_{j = 1}^{[\frac{m}{k}]}i * j * k ^{2} * |gcd(i,j) = 1|$
再化简得$\sum_{i = 1}^{[\frac{n}{k}]}\sum_{j = 1}^{[\frac{m}{k}]}i * j * k ^{2} * \sum_{d | gcd(i,j)}^{} \mu (d)$
考虑枚举d,然后因为满足d | gcd(i,j),所以直接枚举d的倍数i,j即可。
那么就是$k ^ {2}\sum_{d = 1}^{[\frac{n}{k}]} \mu (d)\sum_{i = 1}^{[\frac{n}{kd}]} \sum_{j = 1}^{[\frac{m}{kd}]} id * jd$
上式中因为我们枚举的是倍数i,j,所以值应该是id和jd。
再变形一下得$k ^ {2}\sum_{d = 1}^{[\frac{n}{k}]} \mu (d) * d^{2} \sum_{i = 1}^{[\frac{n}{kd}]} i \sum_{j = 1}^{[\frac{m}{kd}]} j$
观察可以发现后面两项就是等差数列求和,可以O(1)求出。
那么对于前面的莫比乌斯函数,杜教筛筛出前缀和即可,O($\sqrt{n}$)
那么总复杂度就是O($\sqrt{n}$)
求解:$\sum_{i = 1}^{n}\sum_{j = 1}^{m} f(i*j)$
定义f(i*j)为求解i * j的因子个数
有推论:
$\sum_{i = 1}^{n}\sum_{j = 1}^{m} f(i,j) \Rightarrow \sum_{x | i}^{}\sum_{y | j}^{} | gcd(x,y) = 1|$
那么就是求解后面那个东西,直接把最上面的变形套入即可求解。