需要莫比乌斯函数知识,主要是推式子。挺难的,但不多。
对了以后的数学题不放代码,除非是知识点讲解,或者算法模板。
因为总有几个烧饼喜欢复制代码刷AC率
这题的难点就是这个约数个数函数。因此,我先给出这个函数的一个重要性质:
至于证明。。。。。我不会。。。。。
知道式子后就可以“愉快”的推式子了!
首先我们很套路的设几个函数,(若不知道为什么那么设的话。。。反正你看就对了)
由莫比乌斯反演可以得到:
我们设ans为求和最终值;
则
看到这个[gcd(x,y)=1],我们就可以根据μ的性质把它带进去.
更换枚举项,由枚举gcd(x,y)的约数,改为直接枚举d.
将提出来:(因为它与i,j无关)
我们再一次更换枚举项,将枚举x,y换为枚举dx,dy。这样[d∣gcd(x,y)]这个条件就可以省去。
我们可以发现与y无关,所以可以提前。
当我们将式子化简成这样的时候,我们已经可以看出,这个式子已经可以做到O(n)计算了。
但是,由于存在多组数据,所以我们就可以运用整除分块,将这个式子优化成O(sqrt(n))的时间复杂度。
这样,这道题就可以A了。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
还是非常有成就感的。