题面

题目分析

(默认\(n<m\))

题目要求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\)。

由\(lcm(i,j)=\frac{i\cdot j}{gcd(i,j)}\)

得:

\[\begin{split}
ans & =\sum\limits_{i=1}^n\sum\limits_{j=1}^m\frac{i\cdot j}{gcd(i,j)} \\
& =\sum\limits_{d=1}^n\sum\limits_{i=1}^n\sum\limits_{j=1}^m\frac{i\cdot j}{d}[gcd(i,j)==d]\\
& = \sum\limits_{d=1}^nd\cdot \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}i\cdot j[gcd(i,j)==1]
\end{split}
\]

如果只看最后一部分,\(\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}i\cdot j[gcd(i,j)==1]\),可以很自然想到莫比乌斯反演。


(以下\(n,m,gcd\)为\(\lfloor\frac n d\rfloor,\lfloor\frac m d \rfloor,\lfloor\frac {gcd}d\rfloor\))

我们用\(g(i)\)表示\(gcd(i,j)==k\cdot i,k\in Z\)的贡献,\(f(i)\)表示\(gcd(i,j)==i\)的贡献。

于是有\(g(x)=\sum\limits_{x|d}^nf(d) \Rightarrow f(x)=\sum\limits_{x|d}^n\mu(\frac d x)\cdot g(d)\)。

只要可以快速求出\(g(d)\)便可得到答案。

对于\(g(x)\):

\[\begin{split}
g(x)&=\sum\limits_{i=1}^n\sum\limits_{j=1}^mi\cdot j[x|gcd(i,j)]\\
&=x\cdot x\cdot \sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor}i\cdot j[1|gcd(i,j)]\\
&=x\cdot x\cdot \sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}i\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor}j\\
&=x\cdot x\cdot \frac{(1+\lfloor\frac{n}{x}\rfloor)\cdot \lfloor\frac{n}{x}\rfloor}{2}\cdot \frac{(1+\lfloor\frac{m}{x}\rfloor)\cdot \lfloor\frac{m}{x}\rfloor}{2}
\end{split}
\]


最终

\[\begin{split}
ans &=\sum\limits_{d=1}^n d\cdot f(1)\\
&=\sum\limits_{d=1}^n d\cdot \sum\limits_{i=1}^{\lfloor\frac n d\rfloor}\mu(i)\cdot g(i)\\
\end{split}
\]

你会发现,现在的时间复杂度还是有问题,这时候就需要整除分块求解。

P.S

加强版:【BZOJ2693】jzptab

代码实现

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=1e7+5,mod=20101009;
using namespace std;
inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int mu[N],prime[N],g[N];
bool vis[N];
int t(int x){return 1ll*x*(x+1)/2%mod;}
int f(int n,int m){
if(n>m)swap(n,m);
LL ans=0;
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
ans=(ans+1ll*(g[r]-g[l-1])*t(n/l)%mod*t(m/l)%mod)%mod;
}
return ans;
}
int main(){
mu[1]=g[1]=1;
for(int i=2;i<=1e7;i++){
if(!vis[i])prime[++prime[0]]=i,mu[i]=-1;
for(int j=1;j<=prime[0]&&1ll*i*prime[j]<=1e7;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
mu[i*prime[j]]=-mu[i];
}
g[i]=(g[i-1]+1ll*i*i*mu[i]%mod)%mod;
} int n=Getint(),m=Getint();
if(n>m)swap(n,m);
LL ans=0;
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
ans=(ans+1ll*(l+r)*(r-l+1)/2%mod*f(n/l,m/l)%mod)%mod;
}
cout<<(ans+mod)%mod;
return 0;
}

【2011集训贾志鹏】Crash 的数字表格的更多相关文章

  1. A1231. Crash的数字表格(贾志鹏)

    A1231. Crash的数字表格(贾志鹏) 时间限制:2.0s   内存限制:512.0MB   总提交次数:410   AC次数:154   平均分:63.93   将本题分享到:        ...

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

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

  3. 【BZOJ】【2154】Crash的数字表格

    莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...

  4. 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)

    BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...

  5. 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)

    2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...

  6. 【BZOJ2154】Crash的数字表格(莫比乌斯反演)

    [BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...

  7. BZOJ2154/BZOJ2693/Luogu1829 Crash的数字表格/JZPFAR 莫比乌斯反演

    传送门--Luogu 传送门--BZOJ2154 BZOJ2693是权限题 其中JZPFAR是多组询问,Crash的数字表格是单组询问 先推式子(默认\(N \leq M\),所有分数下取整) \(\ ...

  8. BZOJ2154 Crash的数字表格 【莫比乌斯反演】

    BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ...

  9. Crash的数字表格

    Crash的数字表格 求\(\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)\) 解 设\(N<M\),显然有 \[\sum_{i=1}^N\sum_{j=1}^M\frac{i ...

随机推荐

  1. hdu多校第八场 1009 (hdu6665) Calabash and Landlord 计算几何/dfs

    题意: 给定两个矩形,输出这两个矩形把平面分成了多少块. 题解: 本来是道计算几何的大讨论,被我生生写成了bfs. 离散化边,注意不重合的边中间要空出来一格,四周也要空出来一圈,然后暴力bfs计算一共 ...

  2. AtCoder ABC 128D equeue

    题目链接:https://atcoder.jp/contests/abc128/tasks/abc128_d 题目大意 有一个双端队列,里面有 N 个整数,你可以进行如下4种操作: A:从队头那一个到 ...

  3. Hbase启动的时候出现:[RpcServer.handler=28,port=60000] ipc.RpcServer: RpcServer.handler=28,port=60000: exiting,master.HMasterCommandLine: Master exiting

    hadoop 版本:CDH5.02 Hbase 版本:hbase-0.96.1.1-cdh5.0.2 配置文件:hbase-site.xml <configuration> <pro ...

  4. HTML_标签

    <!--HTML:1.概念:最基础的网页开发语言Hyper Text Markup Language 超文本标记语言超文本:超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本. ...

  5. 基于第三方开源库的OPC服务器开发指南(4)——后记:与另一个开源库opc workshop库相关的问题

    平心而论,我们从样例服务器的代码可以看出,利用LightOPC库开发OPC服务器还是比较啰嗦的,网上有人提出opc workshop库就简单很多,我千辛万苦终于找到一个05年版本的workshop库源 ...

  6. iOS开发系列-Category

    Category Category是OC中特有的语法.Category的作用 * 可以在不修改原来类的基础上,为这个类扩充一些方法 * 一个庞大的类可以分为多个模块开发 * 一个庞大的类可以由多个人来 ...

  7. 两个table合并

    1.两个一样的table合并用Merge函数即可合并(但要求table要有主键id) DataTable1.Merge(DataTable2); 2.没写完,以后继续补充(只有经过笔者验证,能用的才会 ...

  8. LightOJ 1342 Aladdin and the Magical Sticks 期望(结论题)

    题目传送门 题意:n根木棍,每根木棍都有一个权值,木棍有可识别的木棍和不可识别的木棍,每次抽取木棍时,会累加权值,如果是可识别的木棍就不放回,不可识别的木棍就放回,问每根木棍至少被抽取一次,权值的期望 ...

  9. 通讯录查询(Profile Lookup)——freeCodeCamp

  10. Oracle18C安装后首次创建数据库并用sql developer 创建连接和用户

    注意: SQL Developer 不能用于创建Oracle数据库,只能用来连接已经创建的数据库,数据库的建立要通过Database Configuration Assistant(DBCA)来完成. ...