Crash的数字表格(莫比乌斯反演)

Crash的数字表格

Description

今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple)。对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数。例如,LCM(6, 8) = 24。回到家后,Crash还在想着课上学的东西,为了研究最小公倍数,他画了一张N*M的表格。每个格子里写了一个数字,其中第i行第j列的那个格子里写着数为LCM(i, j)。一个4 * 5的表格如下: 1 2 3 4 5 2 2 6 4 10 3 6 3 12 15 4 4 12 4 20 看着这个表格,Crash想到了很多可以思考的问题。不过他最想解决的问题却是一个十分简单的问题:这个表格中所有数的和是多少。当N和M很大时,Crash就束手无策了,因此他找到了聪明的你用程序帮他解决这个问题。由于最终结果可能会很大,Crash只想知道表格里所有数的和mod 20101009的值。

Input

输入的第一行包含两个正整数,分别表示 \(N\)\(M\)

Output

输出一个正整数,表示表格中所有数的和\(mod \ 20101009\)的值。

Sample Input

\(4 \ 5\)

Sample Output

\(122\)

【数据规模和约定】

100%的数据满足\(N, M ≤ 10^7\)

由题可得:我们应该求的是 \(\sum_{i =1} ^ n\ \sum_{j=1}^m\ lcm(i,j)\) (不妨设 \(n<=m\)

先可以由原式化简:

\(ans = \sum_{i=1}^n\ \sum_{j=1}^n\ \frac{ij}{gcd(i,j)}\)

\(ans = \sum_{d=1}^n\ \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\ \sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\ [gcd(i,j)=1]\ ijd\)

经过最开始的基本化简以后,既然这道题和 \(gcd\) 有许许多多不可描述的关系,我们可以考虑莫比乌斯反演。
既然要用莫比乌斯反演,我们就应该来构造相应的 \(f(x)\)\(F(x)\)

我们设 \(f(x, y, k)\) 表示 \(\sum_{i=1}^x\ \sum_{j=1}^y\ [gcd[i,j]=k]\ ij\)

再设 \(F(x,y,t)\) 表示 \(\sum_{i=1}^x\ \sum_{j=1}^y\ [t\mid gcd(i,j)]ij\)

\(\therefore \ ans=\sum_{d=1}^n\ d\ f(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor,1)\)

现在,我们来仔细观察一下 \(F(x,y,t)\)\(f(x,y,k)\) 两个函数的关系

\(F(x,y,t)=\sum_{t\mid d}\ f(x,y,d)\)

由莫比乌斯反演后可得:

\(f(x,y,d)=\sum_{d\mid t}\ \mu(\frac{t}{d})\ F(x,y,t)\)

\(\because\ d=1\)

\(\therefore\ f(x,y,1)=\sum_{t=1}^x\ \mu(t)\ F(x,y,t)\)

现在,我们回过头了思考一下我们上面一系列操作的意义:
我们由题目要求推得我们需要求 \(f(x,y,1)\)
但是我们发现直接求并不好求,所以我们反演以后转化为去求 \(F(x,y,t)\) 再进一步求得 \(ans\)
既然我们转化为 \(F(x,y,t)\) ,那么这个函数应该要比较方面我们求值才可以达到我们的要求
所以我们来考虑一下 \(F(x,y,t)\) 这个函数
仔细思考后可以发现:

\(F(x,y,t)=\sum_{d=1}^x\ d^2\ (\sum_{a=1}^{\lfloor\frac{x}{d}\rfloor}\ a\ \sum_{b=1}^{\lfloor\frac{y}{d}\rfloor}\ b)\)

\(sum(x,y)=\sum_{a=1}^x\ \sum_{b=1}^y\ ab\)
显然可以用高斯求和 \(O(1)\) 求得

\(\therefore \ F(x,y,t)=\sum_{d=1}^x\ d^2\ sum(\lfloor\frac{x}{d}\rfloor,\lfloor\frac{y}{d}\rfloor)\)

那么整个分析过程就差不多完成了,综上所述:

\(ans=\sum_{d=1}^n\ d\ f(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor,1)\)
我们可以分块处理 \(f\) ,此处可以分块 复杂度\(O(\sqrt{n})\)

\(f(x,y,1)=\sum_{t=1}^x\ \mu(t)\ F(x,y,t)=\sum_{t=1}^x\ \mu(t)\ t^2\ sum(\lfloor\frac{x}{t}\rfloor,\lfloor\frac{y}{t}\rfloor)\)
我们可以 \(O(1)\) 预处理 \(\mu(t)\ t^2\),计算 \(sum\)

所以总复杂度 \(O(n\sqrt{n})\)

posted @ 2018-02-06 21:17  沛霖  阅读(221)  评论(0编辑  收藏  举报