Jzptab [Bzoj 2693]

本文介绍了一种高效算法来解决最小公倍数(LCM)的求和问题,通过数学推导给出了针对大规模数据的有效解决方案,利用了莫比乌斯反演等高级数论技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址请点击——


Jzptab


Description

这里写图片描述


Input

一个正整数 T 表示数据组数
接下来 T 行 每行两个正整数 表示 N M


Output

T 行,每行一个整数,表示第 i 组数据的结果。


Sample Input

1
4 5


Sample Output

122


Hint

T<=10000
N,M<=10000000


Solution

nm

ans=i=1nj=1mlcm(i,j)=i=1nj=1mijgcd(i,j)=d=1n1dgcd(i,j)=d,1in,1jmij

f(d)=gcd(i,j)=d,1in,1jmij

F(d)=d|gcd(i,j),1in,1jmij


F(d)=(d+2d+3d++ndd)(d+2d+3d++mdd)=d2(1+nd)(1+md)ndmd4

根据莫比乌斯反演,

f(d)=i=1ndμ(i)(id)2(1+nid)(1+mid)nidmid4

ans=d=1ndi=1ndμ(i)i2(1+nid)(1+mid)nidmid4=t=1nt(1+nt)(1+mt)ntmt4i|tμ(i)i

g(d)=i|tμ(i)i ,则 g(d) 为积性函数。

d 的唯一分解式为 pq11×pq22×pq33××pqss

g(d)=i|tμ(i)i=i=1sg(pqii)=i=1s(1pi)

然后用线性筛就可以 O(n) 求出其值。
再求出 ig(i) 的前缀和,分块即可 O(n) 解决此题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值