[国家集训队] 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 @   最爱丁珰  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示