Crash的数字表格
Crash的数字表格
求\(\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)\)
解
设\(N<M\),显然有
\[\sum_{i=1}^N\sum_{j=1}^M\frac{ij}{gcd(i,j)}=\sum_{d=1}^N\frac{1}{d}\sum_{i=1}^N\sum_{j=1}^Mij(gcd(i,j)==d)\]
设
\[f(k)=\sum_{i=1}^N\sum_{j=1}^Mij(gcd(i,j)==k)\]
\[F(k)=\sum_{i=1}^{N}\sum_{j=1}^Mij(k|gcd(i,j))=k^2\sum_{i=1}^{[N/k]}\sum_{j=1}^{[M/k]}ij\]
设\(dc[k]=\sum_{i=1}^ki=\frac{(1+k)\times k}{2},F(k)=k^2dc(N/k)dc(M/k)\)
由Mobius反演定理我们有
\[f(k)=\sum_{k|d}F(d)\mu(d/k)\]
代入有
\[ans=\sum_{d=1}^N\frac{1}{d}\sum_{d|x}^{}x^2dc(N/x)dc(M/x)\mu(x/d)=\]
\[\sum_{d=1}^Nd\sum_{x=1}^{[N/d]}dc(N/xd)dc(M/xd)x^2\mu(x)\]
维护出后式\(x^2\mu(x)\),两次整除分块即可,不难得知时间复杂度\(O(n)\)。
顺便提一下,如果\(N,M\)很小,我们可以变成一下形式,变为\(O(nlogn+T\sqrt{n})\)(T为询问组数)。
\[\sum_{x=1}^Ndc(N/x)dc(M/x)\sum_{d|x}\mu(x/d)\frac{x^2}{d}\]
参考代码:
#include <iostream>
#include <cstdio>
#define il inline
#define ri register
#define ll long long
#define yyb 20101009
#define swap(x,y) x^=y^=x^=y
using namespace std;
bool check[10000001];
int prime[750000],pt,mb[10000001];
void prepare(int);
il int min(int,int),dx(int,int);
int main(){int n,m,nd,md,ndx,mdx,i,ij,j,jj,ans1(0),ans2;scanf("%d%d",&n,&m);if(n>m)swap(n,m);prepare(m);for(i=1;i<=n;i=ij+1){ij=min(n/(n/i),m/(m/i));ans2&=0,nd=n/i,md=m/i;for(j=1;j<=nd;j=jj+1)jj=min(nd/(nd/j),md/(md/j)),(ans2+=(ll)(mb[jj]-mb[j-1])*dx(1,nd/j)%yyb*dx(1,md/j)%yyb)%=yyb;(ans1+=(ll)ans2*dx(i,ij)%yyb)%=yyb;}printf("%d",(ans1+yyb)%yyb);return 0;
}
il int dx(int a,int b){return (ll)(a+b)*(b-a+1)/2%yyb;
}
void prepare(int n){int i,j;check[1]|=mb[1]|=true;for(i=2;i<=n;++i){if(!check[i])prime[++pt]=i,mb[i]=-1;for(j=1;j<=pt&&prime[j]<=n/i;++j){check[i*prime[j]]|=true;if(!(i%prime[j]))break;mb[i*prime[j]]=-mb[i];}}for(i=1;i<=n;++i)mb[i]=((ll)mb[i]*i%yyb*i+mb[i-1])%yyb;
}
il int min(int a,int b){return a<b?a:b;
}
转载于:https://www.cnblogs.com/a1b3c7d9/p/10793938.html
Crash的数字表格相关推荐
- BZOJ 2154 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演,经典好题)(Luogu P1829)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演,经典好题) Problem S ...
- bzoj2154 Crash的数字表格
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 4549 Solved: 1643 [Submit][Status ...
- bzoj2154: Crash的数字表格
好神的莫比乌斯函数然后O(sqrt(n)*sqrt(n))好神的优化啊. #include<cstdio> #include<cstring> #include<ccty ...
- 【BZOJ】【2154】Crash的数字表格
莫比乌斯反演 PoPoQQQ讲义第4题 题解:http://www.cnblogs.com/jianglangcaijin/archive/2013/11/27/3446169.html 感觉两次sq ...
- BZOJ 2154 Crash的数字表格 (莫比乌斯反演)
Crash的数字表格 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如, ...
- P1829 [国家集训队]Crash的数字表格(推了好久的mobius反演)
P1829 [国家集训队]Crash的数字表格 / JZPTAB 推导过程 ∑i=1n∑j=1mlcm(i,j)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} lcm(i, j ...
- P1829 [国家集训队]Crash的数字表格 / JZPTAB
P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意: 求∑i=1n∑j=1mlcm(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)∑i=1n∑j ...
- 【BZOJ2154】Crash的数字表格 [莫比乌斯反演]
Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MB [Submit][Status][Discuss] Description 今天的数学课上,Cr ...
- P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
[国家集训队]Crash的数字表格 / JZPTAB 题目描述 今天的数学课上,Crash 小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数 a a a 和 b b ...
最新文章
- 【NOIP2018】 游记
- 【opencv】(8) 傅里叶变换,高通低通滤波器
- Python 数据类型及其用法
- 离职10天,面挂4家公司!
- 一文搞定Vim/Vi编辑器
- Ant远程部署到Tomcat
- 对表头指针、表头结点,单链表删除的理解
- pythonocc 扩展数据_如何在pythonOCC中使用样条函数?
- 五、线程优先级和守护线程
- CMFCPropertyGridCtrl 的简单教程
- hadoop配置文件还原_hadoop通过Configuration对象自定义配置文件
- 在微信小程序中打造 MQTT 连接测试工具
- 对Laplace方程的学习——来自流沙公众号
- iserdese2接口详解_-02-Xilinx的SerDes接口介绍【Xilinx-LVDS读写功能实现】
- package.json简介
- kafka报错Error while fetching metadata with correlation
- iPhone 13发布前迎来坏消息,摩托车会损坏手机相机?
- 取消耳机孔的 4 年后,苹果居然把耳机卖到了四千块
- Proximal Point Algorithm(PPA)
- 安装教程之Visual C++6.0的安装
热门文章
- pm1 android,今年的Android旗舰标配处理器,骁龙835的细节曝光
- 51单片机实现简单的洗衣机控制系统设计
- 一周IT歪评 | 中兴员工坠亡事件进展/19岁女孩电脑被植入偷窥软件/周鸿祎怒怼92年女生
- Zookeeper如何配置Observer角色
- python输入以回车结束_python将回车作为输入内容的实例
- 网络配置的四大基本要素: ip + netmask + gateway + dns
- JavaWeb开发介绍
- highChart表图大全之饼图圆环图详解
- 工控危险 施耐德PLC产品现高危漏洞
- Malmo——微软人工智能项目