您的位置:首页 > 其它

Jzptab [Bzoj 2693]

2016-06-11 14:23 267 查看
题目地址请点击——

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

令 n≤m,

ans=∑i=1n∑j=1mlcm(i,j)=∑i=1n∑j=1mijgcd(i,j)=∑d=1n1d⋅∑gcd(i,j)=d,1≤i≤n,1≤j≤mij

令 f(d)=∑gcd(i,j)=d,1≤i≤n,1≤j≤mij

F(d)=∑d|gcd(i,j),1≤i≤n,1≤j≤mij



F(d)=(d+2d+3d+…+⌊nd⌋d)(d+2d+3d+…+⌊md⌋d)=d2(1+⌊nd⌋)(1+⌊md⌋)⌊nd⌋⌊md⌋4

根据莫比乌斯反演,

f(d)=∑i=1⌊nd⌋μ(i)⋅(id)2(1+⌊nid⌋)(1+⌊mid⌋)⌊nid⌋⌊mid⌋4

∴ans=∑d=1nd∑i=1⌊nd⌋μ(i)⋅i2(1+⌊nid⌋)(1+⌊mid⌋)⌊nid⌋⌊mid⌋4=∑t=1nt⋅(1+⌊nt⌋)(1+⌊mt⌋)⌊nt⌋⌊mt⌋4∑i|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(1−pi)

然后用线性筛就可以 O(n) 求出其值。

再求出 i⋅g(i) 的前缀和,分块即可 O(n−−√) 解决此题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: