Crash的数字表格(莫比乌斯反演)
Crash的数字表格
Description
今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple)。对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数。例如,LCM(6, 8) = 24。回到家后,Crash还在想着课上学的东西,为了研究最小公倍数,他画了一张NM的表格。每个格子里写了一个数字,其中第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})\)
Crash的数字表格(莫比乌斯反演)的更多相关文章
- [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)
[BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)
题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑Ny=1∑Mlim(x, ...
- 【bzoj2154】Crash的数字表格 莫比乌斯反演
题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如,LCM(6, ...
- 【BZOJ】2154: Crash的数字表格 莫比乌斯反演
[题意]给定n,m,求Σlcm(i,j),1<=i<=n,1<=j<=m,n,m<=10^7. [算法]数论(莫比乌斯反演) [题解] $$ans=\sum_{i\leq ...
- BZOJ 2154 Crash的数字表格 ——莫比乌斯反演
求$\sum_{i=1}^n\sum_{j=1}^n lcm(i,j)$ 枚举因数 $ans=\sum_{d<=n} F(d) * d$ $F(d)$表示给定范围内两两$\sum_{gcd(i, ...
- [国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块
考虑到\(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n} ...
- bzoj2154: Crash的数字表格 莫比乌斯反演
题意:求\(\sum_{i=1}^n \sum_{j=1}^m\frac{i*j}{gcd(i,j)}\) 题解:\(ans=\sum_{i=1}^n\sum_{j=1}^m \frac{i*j}{g ...
- 洛谷 - P1829 - Crash的数字表格 - 莫比乌斯反演
求: \(S(n,m)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 显然: \(S(n,m)=\sum\limits_{i=1}^{n}\ ...
- 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]
数字表格 Time Limit: 50 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...
随机推荐
- linux --memcached的安装与配置
转载:http://blog.sina.com.cn/s/blog_4829b9400101piil.html 1.准备安装包:libevent-2.0.21-stable.tar.gz 和memca ...
- Debug to add expression
Debug expression
- hdu 4082 Hou Yi's secret(暴力枚举)
Hou Yi's secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 关于Python获取图片文件二进制数据的问题(获取为空)
在搭建fastdfs文件系统的时候遇到了点问题,在测试上传文件数据流的时候,需要Python来获取本地文件的二进制流 from fdfs_client.client import Fdfs_clien ...
- 爬虫技术:数据处理josn和pickle模块
一:json模块 json模块的作用就是讲json字符串("{"a":1,"b":1}")和python能够识别的字典进行相互转换. imp ...
- 【leetcode】516. Longest Palindromic Subsequence
题目如下: 解题思路:很经典的动态规划题目,但是用python会超时,只好用C++了. 代码如下: class Solution { public: int longestPalindromeSubs ...
- Java文件处理之FileReader可输出中文字符
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public ...
- darknet-yolov3使用opencv3.4.8时,undefined reference 'imshow()'、'waitKey()'、'nameWindows()'
解决办法:暴力卸载 卸载办法:进入到opencv3.4.8的安装目录下:make uninstall 然后重新安装了其他版本的,立马编译通过了.
- HashMap接口测试
package com.iotek.map; import java.util.Collection;import java.util.HashMap;import java.util.Map;imp ...
- Oracle分组函数之CUBE
功能介绍: 首先是进行无字段的聚合,然后依次对每个字段进行聚合 创建表: 插入测试数据: ROLLUP: Select t.classid,t.studentname,Sum(t.score) Fro ...