考虑到\(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}\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]\frac{ij}{d}\)

\(\sum_{d=1}^{n}\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ijd}\)

\(=\sum_{d=1}^{n}d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ij}\)

看后面

\(\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ij}\)

\(=\sum_{i=1}^{x}\sum_{j=1}^{y}[gcd(i,j)==1]{ij}\)

考虑反演

\(f(d)=\sum_{i=1}^{x}\sum_{j=1}^{y}[gcd(i,j)==d]{ij}\)

\(G(d)=\sum_{i=1}^{x}\sum_{j=1}^{y}[d|gcd(i,j)]{ij}\)

\(G(d)=d^2\sum_{i=1}^{x/d}\sum_{j=1}^{y/d}[1|gcd(i,j)]{ij}\)

\(G(d)=d^2\sum_{i=1}^{x/d}\sum_{j=1}^{y/d}{ij}\)

于是

\(f(1)=\sum_{i=1}^x\mu(i)G(i)\)

\(ans=\sum_{d=1}^{n}d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ij}\)

在这里做第一次分块,而后

\(f(1)=\sum_{i=1}^x\mu(i)G(i)\)

\(=\sum_{i=1}^x\mu(i)i^2\sum_{i=1}^{x/d}\sum_{j=1}^{y/d}{ij}\)

然后内外各做一次整除分块即可

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 12000005;
const int mod = 20101009;
int mu[N+5],sum[N+5],pr[N+5],is[N+5],cnt; int h(int n,int m) {
int l=1,r,ans=0;
while(l<=n) {
r=min(n/(n/l),m/(m/l));
ans += (sum[r]-sum[l-1]+mod)%mod
* ((n/l)*(n/l+1)/2%mod)%mod
* ((m/l)*(m/l+1)/2%mod)%mod;
ans %= mod;
l=r+1;
}
return ans;
} signed main() {
mu[0]=mu[1]=1; is[1]=1;
for(int i=2;i<=N;i++) {
if(is[i]==0) {
pr[++cnt]=i;
mu[i]=-1;
}
for(int j=1; j<=cnt&&pr[j]*i<N; ++j) {
is[pr[j]*i]=1;
if(i%pr[j]==0) {
mu[pr[j]*i]=0;
break;
}
else {
mu[pr[j]*i]=-mu[i];
}
}
}
for(int i=1;i<=N;i++) sum[i]=(sum[i-1]+mu[i]*i*i%mod)%mod;
int n,m;
cin>>n>>m;
if(n>m) swap(n,m);
int l=1,r,ans=0;
while(l<=n) {
r=min(n/(n/l),m/(m/l));
ans+=(r-l+1)*(l+r)/2%mod*h(n/l,m/l)%mod;
ans%=mod;
l=r+1;
}
cout<<ans<<endl;
}

[国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块的更多相关文章

  1. [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)

    [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...

  2. [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)

    题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...

  3. 题解-[国家集训队]Crash的数字表格 / JZPTAB

    题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...

  4. P1829 [国家集训队]Crash的数字表格

    P1829 [国家集训队]Crash的数字表格 原题传送门 前置芝士 莫比乌斯反演 乘法逆元 数论分块 正文 //补充:以下式子中的除法均为整除 由题目可以得知,这道题让我们所求的数,用一个式子来表达 ...

  5. 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告

    [国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...

  6. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  7. [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∑N​y=1∑M​lim(x, ...

  8. [luogu1829][bzoj2154][国家集训队]Crash的数字表格 / JZPTAB【莫比乌斯反演】

    传送门:洛谷,bzoj 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整 ...

  9. 【洛谷1829】 [国家集训队] Crash的数字表格(重拾莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\). 推式子 不会莫比乌斯反演的可以先去看这篇博客:初学莫比乌斯反演. 反演题显然就是推式子啊~~~ 考 ...

随机推荐

  1. Javascript 基础学习(七)常用内置对象

    Array 定义 数组也是一个对象,是一个用来存储数据的对象.和Object类似,但是它的存储效率比普通对象要高.数组中保存的内容我们称为元素.数组使用索引(index)来操作元素.索引指由0开始的整 ...

  2. css基础-定位+网页布局案例

    position:static 忽略top/bottom/left/right或者z-index position:relative 设置相对定位的元素不会脱离文档流 position:fixed 不 ...

  3. Fhq Treap [FhqTreap 学习笔记]

    众所周知 Fhq Treap 是 fhq 神仙研究出来的平衡树- 具体实现 每个点实现一个 \(\text{rnd}\) 表示 rand 的值 为什么要 rand 呢 是为了保证树高为 \(\log ...

  4. 解决const char* to char* 的错误

    一般情况下 char* string = "abc"; 编译后会出现标题中的错误. 我们只需要在字符串前加上const_cast<char*>即可,这个作用是丢弃变量的 ...

  5. Interger对象不要用==进行比较

    为了更好的空间和时间性能,Integer会缓存频繁使用的数值,数值范围为-128到127,在此范围内直接返回缓存值. IntegerCache.low 是-128,IntegerCache.high是

  6. spring cloud config---Could not resolve placeholder 'xxx' in string value "${xxx}"

    初学SpringCloud 跟着视频写配置 前前后后检查了许久,配置代码没问题 最后发现是client项目的配置文件名有问题,不应该是application.yml 而是bootstrap.yml 那 ...

  7. 为什么你应该使用 Object.is() 进行相等性比较(译)

    Title: Why you should use Object.is() in equality comparison Author: TarekAlQaddy Website: https://w ...

  8. mongodb 基础入门教程

    算是学习下来精炼的笔记,希望对大家有帮助.如果有问题欢迎大家指正. 0.概述 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保 ...

  9. 杜教筛BM

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  10. gulp常用插件之gulp-rev使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-rev这是一款为静态文件随机添加一串hash值, 解决cdn缓存问题, a.css --> a-d2f3f35d3.css.根据静 ...