[国家集训队] Crash的数字表格 / JZPTAB

题目所求即

i=1nj=1mijgcd(i,j)

这里没有出现[gcd(x,y)=1],所以我们枚举gcd的值来硬凑,原式就等于

d=1min(n,m)i=1nj=1mijgcd(i,j)[gcd(i,j)=d]

为了出现[gcd(i,j)=1],直接将i,j变成d的倍数,原式就等于

d=1min(n,m)d|id|jijd[gcd(i,j)=d]=d=1min(n,m)k=1ndt=1mdktd[gcd(k,t)=1]=d=1min(n,m)dk=1ndt=1mdktp|gcd(k,t)u(p)=d=1min(n,m)dp=1min(nd,md)u(p)p|kp|tkt=d=1min(n,m)dp=1min(nd,md)u(p)i=1ndpipj=1mdpjp=d=1min(n,m)dp=1min(nd,md)u(p)p2(i=1ndpi)(j=1mdpj)

最后两项用等差数列求和公式就好了,然后分块套分块即可

update 2024.8.6

也可以利用莫比乌斯反演的第二形式

d=1min(n,m)dp=1min(nd,md)u(p)p2(i=1ndpi)(j=1mdpj)=d=1min(n,m)dp=1min(nd,md)u(p)p2(1+mdp)mdp2(1+ndp)ndp2=T=dpd=1min(n,m)p=1min(nd,md)u(Td)T2d(1+mT)mT2(1+nT)nT2=T=1min(n,m)T(1+mT)mT2(1+nT)nT2d|TTdu(Td)=F(T)=d|TTdu(Td)T=1min(n,m)T(1+mT)mT2(1+nT)nT2F(T)

现在考虑如何快速计算F(T),显然由数据范围可以知道我们需要用线性筛,而线性筛弄的是积性函数,所以我们要先证明F为积性函数,即若a,b互质,则F(ab)=F(a)F(b)

证:

F(a)F(b)=d|aadu(ad)k|bbku(bk)=d|ak|babdku(ad)u(bk)=u是积性函数d|ak|babdku(abdk)=a,bF(ab)

然后用线性筛就好了

这道题目告诉我们只要出现了gcd就可以尝试枚举gcd的值,即使gcd出现在求式里面而不是作为条件

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示