BZOJ 3994 [SDOI2015]约数个数和 (莫比乌斯反演)
题目大意:略
洛谷传送门
首先要知道这样一个公式不知道这个公式这道题还怎么做...
$d(ij)=\sum\limits_{x=1}^{i} \sum\limits_{y=1}^{j}[gcd(x,y)==1]$
具体证明可以参考这位神犇的博客
大意是说,令$k=i \cdot j$,把$k,i,j$都分解成质因子幂次乘积的形式
那么对于其中一个质因子$p$,$k,i,j$里,$p$的幂次分别为$c,a,b$
那么因为$p^{c}=p^{a} \cdot p^{b},c=a+b$
对于$k$的所有约数,$p$能取的幂次是$0,1,2...c$,一共$c+1=a+b+1$种取值
而在上述式子中,保证$x,y$互质,则$x,y$中$p$的指数,$x$取$0$,$y$取$[1,b]$,或者$x$取$[1,a]$,$y$取$0$,或者$x,y$都取$0$,一共$a+b+1$种取值,和上述论证吻合
而质因子之间互不影响,所以推广到多个质因子上,这个结论依然是正确的
进入正题,我们有了这个公式,下面的推导就十分经典套路了
$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{x|i} \sum\limits_{y|j} [gcd(x,y)==1]$
$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{x|i} \sum\limits_{y|j} \sum\limits_{d|gcd(x,y)} \mu(d)$
$\sum\limits_{d=1}^{n} \mu(d) \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{x|i}\sum\limits_{y|j}[d|gcd(x,y)]$
$\sum\limits_{d=1}^{n} \mu(d) \sum\limits_{x=1}^{n}\sum\limits_{y=1}^{m} \left \lfloor \frac{n}{x} \right \rfloor \left \lfloor \frac{m}{y} \right \rfloor [d|gcd(x,y)]$
$\sum\limits_{d=1}^{n} \mu(d) \sum\limits_{x=1}^{n} \left \lfloor \frac{n}{dx} \right \rfloor \sum\limits_{y=1}^{m} \left \lfloor \frac{m}{dy} \right \rfloor$
令$g(n)=\sum\limits_{x=1}^{n} \left \lfloor \frac{n}{x} \right \rfloor$
则$\sum\limits_{d=1}^{n} \mu(d) g(\left \lfloor \frac{n}{d} \right \rfloor) g(\left \lfloor \frac{m}{d} \right \rfloor )$
$g(n)$可以利用整除分块的思想在$O(n\sqrt n)$的时间内预处理出来
对于每个询问也用整除分块求解即可,总时间$O(T\sqrt n+n\sqrt n)$
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define N1 50010 5 #define ll long long 6 #define dd double 7 #define inf 2147483647 8 #define maxn 50000 9 using namespace std; 10 11 ll g[N1]; 12 int pr[N1],mu[N1],smu[N1],use[N1],cnt; 13 void init() 14 { 15 int n,i,j,la; 16 for(n=1;n<=maxn;n++) 17 { 18 for(i=1;i<=n;i=la+1) 19 { 20 la=(n/(n/i)); 21 g[n]+=1ll*(la-i+1)*(n/i); 22 } 23 } 24 for(mu[1]=smu[1]=1,i=2;i<=maxn;i++) 25 { 26 if(!use[i]){ pr[++cnt]=i; mu[i]=-1; } 27 for(j=1;j<=cnt&&i*pr[j]<=maxn;j++) 28 { 29 use[i*pr[j]]=1; 30 if(i%pr[j]){ mu[i*pr[j]]=-mu[i]; } 31 else break; 32 } 33 smu[i]=smu[i-1]+mu[i]; 34 } 35 } 36 int n,m,T; 37 38 int main() 39 { 40 scanf("%d",&T); 41 init(); 42 int i,j,la;ll ans=0; ll inv,y; 43 while(T--) 44 { 45 scanf("%d%d",&n,&m); if(n>m) swap(n,m); ans=0; 46 for(i=1;i<=n;i=la+1) 47 { 48 la=min(n/(n/i),m/(m/i)); 49 ans+=1ll*(smu[la]-smu[i-1])*g[n/i]*g[m/i]; 50 } 51 printf("%lld\n",ans); 52 } 53 return 0; 54 }
转载于:https://www.cnblogs.com/guapisolo/p/10223833.html
BZOJ 3994 [SDOI2015]约数个数和 (莫比乌斯反演)相关推荐
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数 ...
- 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演
题目描述 设d(x)为x的约数个数,给定N.M,求 输入 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. 输出 T行,每行一个整数,表示你 ...
- P3327 [SDOI2015]约数个数和 (mobius反演)
P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n∑j=1md(ij ...
- [BZOJ3994][SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1104 Solved: 762 [Submit][St ...
- [SDOI2015]约数个数和【莫比乌斯反演】
[SDOI2015]约数个数和 题意:\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^n\sum{j=1}^md(ij)\) 由结论得\[ans=\sum_{i=1}^n\sum_ ...
- BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)
BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演) 手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/ ...
- [bzoj3994] [SDOI2015]约数个数和
Description 设d(x)为x的约数个数,给定N.M,求 \(\sum_{i=1}^N\sum_{j=1}^Md(ij)\) Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测 ...
- luogu P3327 [SDOI2015]约数个数和(rng58-clj等式)
luogu P3327 [SDOI2015]约数个数和(rng58-clj等式) 题目大意 设d(x)d(x)d(x)为x的因子的个数,给出N和M求 ∑i=1n∑j=1md(i,j)\sum_{i=1 ...
最新文章
- LeetCode中等题之删除链表的中间节点
- 何恺明一作论文 MAE 已有人复现!PyTorch 版!(附链接)
- 当一个程序员面临太多选择的时候
- ubuntu下安装mysql及常用操作
- c语言判断整数_C语言技能|(草稿,不断完善中...)
- jQuery高度及位置操作
- PHP公鸡五文钱,公鸡
- 华为Mate30系列前面板曝光:双曲面刘海屏再获证实
- 通过CentOS克隆虚拟机后发现无法启动网卡或无法上网的解决办法
- redis连接php
- opencv 图像读写显示、matplotlib 库图像读写显示
- docker数据卷之dockerfile
- Git学习笔记之廖雪峰Git教程
- hill密码 java_希尔密码(Hill Cipher)的实现
- python面板数据模型操作步骤_面板模型回归操作指南,适合初学者!
- category-内部原理、运用场景、特点
- 13. 查询表orders——统计销售总量大于50的各类商品的ID和销售总量
- v4l2架构专题模块handler分析 --- handler的初始化及handler ctrl注册
- 大数据开发之在idea中开发第一个hadoop程序
- MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O
热门文章
- DataTable是否存在某个列的判断
- [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程
- 位运算应用口诀和实例(转自大笨狼)
- 美玉待琢——《一本写满评论的艾泽拉斯收藏指南》
- mongoose --- 建立一个集合规则,并导出.
- Day03:文件打开;错误处理
- Vue 父子组件间的通信
- 走在网页游戏开发的路上(十)
- 从C语言到C++成长经历所得的一些技巧和感悟
- 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常