今天我们开始莫比乌斯反演的学习.这篇博文特别多的公式,强迫症患者请勿观看
莫比乌斯反演
莫比乌斯函数:
定义莫比乌斯函数,当
时,
.
当是square-free number时,设
的质因数分解有
项,则
;
否则,;
根据上面,我们不难验证也是积性函数
定理
,即
和
互为彼此的逆
证明
设n的不同质因子有k个,分别为,那么有
                                       
                                        
莫比乌斯反演
定义
莫比乌斯变换:设数论函数,称
为莫比乌斯变换.
莫比乌斯反演:设数论函数,称
为莫比乌斯反演.
例如:
,即
;   
,即
;
练习
接下来,我们根据上篇博文的知识和莫比乌斯反演来做几道题:
给出,求
我们之前学欧拉函数的时候,能求,但是当
的时候,就不能再用欧拉函数求了.
还是之前的套路:
                        
不妨设,继续推:
                        
                         
                        
                        
此时用整数分块已经可以做到的复杂度,足以解决此题.
for(int k=1;k<=min(n,m);k++){
    int a=n/k,b=m/k;
    long long sum=0;
    for(int l=1,r;l<=min(a,b);l=r+1){
        r=min(a/(a/l),b/(b/l));
        sum+=1ll*(smu[r]-smu[l-1])*(a/l)*(b/l);
    } 
    ans+=sum*k;
}由答案的对称性,不妨设,然后我们继续推:
                        
                        
由于,所以
,那么最终答案就是
,这个式子在线性筛出
及其前缀和的情况下,可以用整数分块做到
一次回答(用于应对多组询问的情况).这样我们就可以得到一种
的算法.
接下来,我们在做一个例题:
给出n,m求
与前面的例题类似的推法,最后得到:
                                                        
设,看上去不是很好线性筛,不过可以用厄拉多塞筛法在O(n log log n)内算出前缀和,然后用整数分块回答询问.
好了,今天的内容到这里就结束了,感谢大家的收看(估计那么多公式也看不懂…)

















![[Python学习系列] 走进Django框架](https://img-blog.csdnimg.cn/25df00b39891417a80e9463099c351ae.png)

