版权声明:博主是个蒟蒻,希望大家支持,如果要转发就转发吧,把我链接挂上即可。 https://blog.csdn.net/LightningUZ/article/details/89003801
题目简述
给定
A和
B(多组数据),求
i=1∑nj=1∑nlcm(i,j)μ2(gcd(i,j))
已经帮您完成放大操作,不用划鼠标了。。。
数据
输入:
5
2 2
4 6
3 4
5 1
23333 33333
输出:
7
148
48
15
451085813
(还需要解释?自己写暴力。。。)
思路
2333纯数论题我最喜欢了!(数论是我小老婆,大老婆是芙兰朵露·斯卡雷特)
显然这题需要莫比乌斯反演(不会?去看pengym的博客或者我的博客。。。)
设
gcd(i,j)=g(我懒),原式
=i=1∑Aj=1∑Bgijμ2(g)=d=1∑Ai=1∑Aj=1∑B[g=d]μ2(d)dij枚举gcd(i,j),设为d。然后每次找g=d的,这个多想几次就明白了=d=1∑Ai=1∑⌊dA⌋j=1∑⌊dB⌋[g=1]μ2(d)ijd这个就是把i,j换成枚举d的倍数,所以右面也换成了ijd,上限也换成了A/d和B/d=d=1∑Ai=1∑⌊dA⌋j=1∑⌊dB⌋μ2(d)ijdq∣g∑μ(q)这个不用解释,就是基本反演式=d=1∑Aq=1∑⌊dA⌋μ(q)i=1∑⌊dA⌋j=1∑⌊dB⌋[q∣g]μ2(d)ijd这个有点思维量,不过也是基本技巧,如果理解透了莫比乌斯反演式,这个就能懂=d=1∑Aq=1∑⌊dA⌋μ(q)i=1∑⌊dqA⌋j=1∑⌊dqB⌋[1∣g]μ2(d)ijdq2这个就是把i,j换成了枚举dq的倍数,所以后面多乘一个q2。而且1|g是废话,珂以删掉=d=1∑Adμ2(d)q=1∑⌊dA⌋μ(q)q2(i=1∑⌊dqA⌋i)(j=1∑⌊dqB⌋j)这一步就是把一些无关的东西提到了最前面其中(i=1∑⌊dqA⌋i)和(j=1∑⌊dqB⌋j)珂以用高斯求和公式(就是1加到100那个广为人知的故事)O(1)求出来然后前面整除分块,卡卡能过
有一点注意,由于模的是
230,所以珂以让其自然溢出,然后&一下
(1<<30)−1即可。
代码: