bzoj2820: YY的GCD
2016-04-18 10:25
288 查看
题意
给定\(n,m(1 \leqslant n,m \leqslant 10000000)\),求\(1\leqslant x \leqslant n\), \(1 \leqslant y \leqslant m\)且\(\gcd(x, y)\)为质数的\((x, y)\)有多少对.
\(T(\leqslant 10000)\)组询问
题解
\[ans = \sum_{p \in P}\sum_{i=1}^{n}\sum_{j=1}^{m}{[\gcd(i,j)=p]} \\
= \sum_{p \in P}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}{[\gcd(i,j)=1]} \\
= \sum_{p \in P}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\sum_{d|\gcd(i,j)}\mu(d) \\
= \sum_{p \in P}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\sum_{d|i,d|j}\mu(d) \\
= \sum_{p \in P} \sum_{d=1}^{\min(n,m)} \mu(d)\biggl\lfloor\frac{n}{pd}\biggr\rfloor \biggl\lfloor\frac{m}{pd}\biggr\rfloor \\
= \sum_{T}^{\min(n,m)}\biggl\lfloor\frac{n}{T}\biggr\rfloor \biggl\lfloor\frac{m}{T}\biggr\rfloor \sum_{p \in P, p|T}\mu(\frac{T}{p})\]
令\[f(T)=\sum_{p \in P, p|T}\mu(\frac{T}{p})\]
那么对\(f(T)\)求前缀和则问题可以在\(O(\sqrt{n})\)的时间内解决。
显然\(f(T)\)可以通过类似埃式筛法在\(O(n\log\log n)\)的时间内求出
至此,问题在\(O(n\log\log n+T\sqrt{n})\)内解决
————————————————————————————————————————
然而\(f(T)\)仍然可以通过线性筛得到:
现在已知\(f(x) = \sum_{p'|x}\mu(\frac{x}{p'})\)
考虑\(f(px)\)
若\(p|x\),则\[f(px) = \sum_{p'|x}\mu(\frac{xp}{p'})\]
显然,当\(p=p'\)时值为\(\mu(x)\),当\(p \ne p'\)时,值为0.
所以此时\(f(px) = \mu(x)\)
若\(p\not|x\),则\[f(px) = \sum_{p'|x}\mu(\frac{xp}{p'}) + \mu(x) = -f(x) + \mu(x)\]
至此,问题在\(O(n+T\sqrt{n})\)内解决
给定\(n,m(1 \leqslant n,m \leqslant 10000000)\),求\(1\leqslant x \leqslant n\), \(1 \leqslant y \leqslant m\)且\(\gcd(x, y)\)为质数的\((x, y)\)有多少对.
\(T(\leqslant 10000)\)组询问
题解
\[ans = \sum_{p \in P}\sum_{i=1}^{n}\sum_{j=1}^{m}{[\gcd(i,j)=p]} \\
= \sum_{p \in P}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}{[\gcd(i,j)=1]} \\
= \sum_{p \in P}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\sum_{d|\gcd(i,j)}\mu(d) \\
= \sum_{p \in P}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}\sum_{d|i,d|j}\mu(d) \\
= \sum_{p \in P} \sum_{d=1}^{\min(n,m)} \mu(d)\biggl\lfloor\frac{n}{pd}\biggr\rfloor \biggl\lfloor\frac{m}{pd}\biggr\rfloor \\
= \sum_{T}^{\min(n,m)}\biggl\lfloor\frac{n}{T}\biggr\rfloor \biggl\lfloor\frac{m}{T}\biggr\rfloor \sum_{p \in P, p|T}\mu(\frac{T}{p})\]
令\[f(T)=\sum_{p \in P, p|T}\mu(\frac{T}{p})\]
那么对\(f(T)\)求前缀和则问题可以在\(O(\sqrt{n})\)的时间内解决。
显然\(f(T)\)可以通过类似埃式筛法在\(O(n\log\log n)\)的时间内求出
至此,问题在\(O(n\log\log n+T\sqrt{n})\)内解决
————————————————————————————————————————
然而\(f(T)\)仍然可以通过线性筛得到:
现在已知\(f(x) = \sum_{p'|x}\mu(\frac{x}{p'})\)
考虑\(f(px)\)
若\(p|x\),则\[f(px) = \sum_{p'|x}\mu(\frac{xp}{p'})\]
显然,当\(p=p'\)时值为\(\mu(x)\),当\(p \ne p'\)时,值为0.
所以此时\(f(px) = \mu(x)\)
若\(p\not|x\),则\[f(px) = \sum_{p'|x}\mu(\frac{xp}{p'}) + \mu(x) = -f(x) + \mu(x)\]
至此,问题在\(O(n+T\sqrt{n})\)内解决
相关文章推荐
- iOS开发--数组
- ubuntu svn 中添加忽略文件的方法
- HTTPAnalyzer截获SoapUI发送的接口报文
- 工作笔记——sqlserver引号的运用
- jquery $(document).ready() 与window.onload的区别
- 如何恢复自身的精力 [转]
- 关于阿里的笔试题for循环中嵌套setTimeout
- 使用Python进行稳定可靠的文件操作详解
- VBA添加表格
- 《CSS权威指南》基础复习+查漏补缺
- 关于缓存的一些问题!请大牛指点!
- 【转载】 android 圆角圆形图片ShapedImageView不到100行代码
- O365 Onedrive使用手册
- 最简实例说明wait、notify、notifyAll的使用方法
- js鼠标滚轮放大缩小图片
- 单例模式
- C++_友元函数
- SCOJ 4493: DNA 最长公共子串 后缀自动机
- mysql中怎么实现oracle中的to_char和to_date
- mule学习2