【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 ...
随机推荐
- error C2443: operand size conflict
#include <stdio.h> void main() { int a=98; __asm { mov al,a and al,11011111B mov a ...
- java发送http的get/post请求(一)
HTTP请求类 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ...
- 转:这里有些sscanf()的一些使用说明,都是从论坛,Blog里整理出来的。供大家使用。
http://www.cnblogs.com/gmh915/archive/2009/09/30/1576995.html 这里有些sscanf()的一些使用说明,都是从论坛,Blog里整理出来的.供 ...
- jq选项卡切换功能
效果图: <!DOCTYPE html> <html lang="en"> <head> <style> *{margin:0;pa ...
- MySQL中查询所有数据库占用磁盘空间大小
查询所有数据库占用磁盘空间大小的SQL语句: 复制代码 代码如下:select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2), ...
- Java 虚拟机 - 2.3 HotSpot虚拟机对象
对象的创建 Step1 类加载检查 当发现一条new指令时,检查: 该指令的参数是否能在常量池中定位到一个类的符号引用: 并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没有,那必须先 ...
- Java 虚拟机 - GC机制
GC机制的一些总结 https://blog.csdn.net/super_qing_/article/details/85263991 https://blog.csdn.net/yhyr_ycy/ ...
- scala中类的简单使用记录
import scala.collection.mutable.ArrayBuffer /** * scala 中内部类的使用 */ class Classes { class Stu(name:St ...
- spring整合Quartz框架过程,大家可以参考下
这篇文章详细介绍了spring集成quartz框架流程,通过示例代码进行了详细说明,对学习或任务有参考学习价值,并可供需要的朋友参考. 1.quartz框架简介(m.0831jl.com) quart ...
- win10 mysql5.7忘记密码如何解决
点击开始菜单,搜索cmd.exe,左击以管理员身份运行 操作之前先备份好数据库(切忌) C:\Users\Administrator>cd C:\Program Files\MySQL\MySQ ...