【2011集训贾志鹏】Crash 的数字表格
题面

题目分析
(默认\(n<m\))
题目要求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\)。
由\(lcm(i,j)=\frac{i\cdot j}{gcd(i,j)}\)
得:
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)\):
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}
\]
最终
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 的数字表格的更多相关文章
- A1231. Crash的数字表格(贾志鹏)
A1231. Crash的数字表格(贾志鹏) 时间限制:2.0s 内存限制:512.0MB 总提交次数:410 AC次数:154 平均分:63.93 将本题分享到: ...
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- 【BZOJ】【2154】Crash的数字表格
莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...
- 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&&BZOJ 2693 jzptab)
BZOJ 2154 crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b ...
- 【BZOJ 2154】Crash的数字表格 (莫比乌斯+分块)
2154: Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...
- 【BZOJ2154】Crash的数字表格(莫比乌斯反演)
[BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...
- BZOJ2154/BZOJ2693/Luogu1829 Crash的数字表格/JZPFAR 莫比乌斯反演
传送门--Luogu 传送门--BZOJ2154 BZOJ2693是权限题 其中JZPFAR是多组询问,Crash的数字表格是单组询问 先推式子(默认\(N \leq M\),所有分数下取整) \(\ ...
- BZOJ2154 Crash的数字表格 【莫比乌斯反演】
BZOJ2154 Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b) ...
- Crash的数字表格
Crash的数字表格 求\(\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)\) 解 设\(N<M\),显然有 \[\sum_{i=1}^N\sum_{j=1}^M\frac{i ...
随机推荐
- 第37讲 谈谈Spring Bean的生命周期和作用域
在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spr ...
- Git及github使用(二)上传项目
接上篇中创建好的项目. 1.进入到相应的目录右键Git bash here打开客户端 2.创建一个readme文本 $ echo "# Python日常记录积累" >> ...
- 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll已解决
问题 : 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll 解决 1, 首先把C:\Windows\SysWOW64\的api-ms-win-crt- ...
- HDFS API 操作实例(一) HDFS读写操作
1. 读取HDFS文件 1.1 字符读取HDFS上的文件 Configuration conf = new Configuration(); Path path = new Path(pathstr) ...
- Python匹马行天下之python之父
龟叔和他的python 经过了漫长的旅程,终于要看到主角Python了.Python是现在非常非常流行的编程语言,在我们能看到的大部分编程语言排行榜中,Python都能在前三甲中拥有一席之地 ,并且发 ...
- 最接近神的人_NOI导刊2010提高(02)
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...
- 【学术篇】SDOI2010 古代猪文
这里可能包含传送门 又双叒叕数论大杂烩... 定理什么我都不会证 题目很长很啰嗦 但是题意很显然... 化完式子之后就是这么个东东:\(G^{\sum_{k|n}C_k^{\frac{n}{k}}}\ ...
- Chrome DNS_PROBE_FINISHED_NXDOMAIN
win10 下的Chrome访问网站时,提示DNS_PROBE_FINISHED_NXDOMAIN 解决方法很简单: 用管理员身份打开cmd后,运行如下指令即可解决问题. 运行命令: netsh wi ...
- springboot mail 发送邮件
新开发了一个新的功能,要求使用java发送邮件,在此记录下代码,以方便后来者: 1.首先需要开通邮箱,开通smtp功能,我这边使用的是新浪邮箱,试过163.qq,比较麻烦,后来看到别人使用新浪,直接使 ...
- 【JZOJ3422】水叮当的舞步
description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上 ...