题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101

莫比乌斯反演

1101: [POI2007]Zap

设 \(f(i)\) 表示 \((x,y)\) \(x\in [1,a],y\in [1,b]\) 满足 \(gcd(x,y)=i\) 的对数
那么答案就是 \(f(d)\)

构造一个函数 \(g(i)\) 表示 \((x,y)\) \(x\in [1,a],y\in [1,b]\) 满足 \(gcd(x,y)|i\) 的对数

于是 \(g\) 与 \(f\) 满足关系式
\(g(i)=\sum\limits_{i|k}f(k)\)
满足莫比乌斯反演的第二种情况
于是套公式反演得
\(f(i)=\sum\limits_{i|k}\mu(\frac {k}{i})g(k)\)
对于 \(g(i)\) 考虑 \(gcd(x,y)|i\) 即 \(x\) 与 \(y\) 都有 \(i\) 这个因子
那么 \(x\) 有 \([\frac{a}{i}]\) 个取值 \(y\) 有 \([\frac{b}{i}]\) 个取值
\(g(i)=[\frac{a}{i}]\times[\frac{b}{i}]\)
于是答案
\[
\begin{aligned}
ans=f(d)&=\sum\limits_{d|k}\mu(\frac {k}{d})g(k)\\
&=\sum\limits_{d|k}\mu(\frac {k}{d})[\frac{a}{k}]\times[\frac{b}{k}]
\end{aligned}
\]
设 \(t=\frac{k}{d},k=d\times t;\)
\[
\begin{aligned}
ans=\sum\limits_{t=1}^{min([\frac{a}{d}],[\frac{b}{d}])}\mu(t)[\frac{\frac{a}{t}}{d}][\frac{\frac{b}{t}}{d}]
\end{aligned}
\]
筛一下 \(\mu(i)\)
于是就可以做到 \(O(n\times t)\)
但是效率不行呀
观察到一个形似 \(\sum\limits_{i=1}^{i\le n}[\frac{x}{i}]\) 的式子。
整除分块:(选自他人博客,但是找不到了博客地址了QAQ)
整除分块可以做到 \(O(\sqrt{n}):\)

正确性证明

开始时左端点是 \(1\) 显然是没有问题的,而以后的每一次操作 \(L=R+1\),因此,我们只需要证明每次的 \(R\) 都为正确的即可。
首先\([\frac {n}{i}]\)一定是属于该除数区间的,所以我们只需要证明该数为区间上界。

反证法。设X=\([\frac {n}{i}]\)不是我们想要得到的 \(R\),那么至少有 \(X+1\)属于答案区间。

于是有\([\frac{N}{X+1}⌋=i\),因为是下取整,于是有\(N≥i\times (X+1)\),于是有 \([\frac{N}{i}]≥([\frac{i×(X+1)}{i}]=X+1)\)

而根据定义有 \(X=[\frac{N}{i}]\),于是有 \(X≥X+1\),与事实相悖。

复杂度证明

分情况讨论。

当所选除数 \(\le \sqrt{N}\) 时,显然这一部分的除数区间个数不会超过 \(\sqrt{N}\) 个。

当所选除数\(\geq \sqrt{N}\) 时,得到的商 \(\le \sqrt{N}\),商不超过 \(\sqrt{N}\) 种,所以除数区间也不会超过 \(\sqrt{N}\) 个。

于是总时间复杂度 \(O(\sqrt{N})\)。

最新文章

  1. python学习-day14-前端之html、css
  2. Objective-C之NSArray(数组)默认排序与自定义排序
  3. iOS - OC/Swift:验证手机号/固话用正则表达式
  4. C 和 C++ 混合代码 cmath编译出错
  5. ZOJ3865:Superbot(BFS) The 15th Zhejiang University Programming Contest
  6. Python多线程启动http.server
  7. 请问什么是UTF字符串?
  8. 换种眼光看Spring之bean是怎么诞生的(一)
  9. ubuntu進入dos界面命令 ubuntu進入圖形界面命令
  10. Dojo实现Tabs页报错(一)
  11. 让你的JS代码更具可读性
  12. 第三方工具 - 关于echarts下钻功能的一些总结.js
  13. [SHOI2006]color 有色图[群论、组合计数]
  14. SpringMvc配置扫包之后,访问路径404问题解决
  15. Socket网络编程--简单Web服务器(2)
  16. js实现禁止右键 禁止f12 查看源代码
  17. 如何查看java进程
  18. Keystone-manage 命令
  19. restfull 风格 参考 https://blog.csdn.net/jaryle/article/details/52141097
  20. awk高级进阶

热门文章

  1. apply的调用 http://bbs.51js.com/thread-82017-1-3.html
  2. OLE工具套件分析OFFICE宏恶意样本
  3. postgresql----数据库表约束----UNIQUE
  4. Error:(12, 64) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出
  5. docker 2375 vulnerability and self-signatuer certifications
  6. 项目无法运行iPhone5模拟器
  7. hdu 5056 Boring count (窗体滑动)
  8. 7.如何将python脚本打包为exe形式
  9. Python微信机器人
  10. [svc]ip地址划分