Processing math: 8%

●BZOJ 2820 YY的GCD

题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=2820

题解:

莫比乌斯反演

先看看这个题:HDU 1695 GCD(本题简化版)

HDU 1695 GCD:求满足x∈(1~n)和y∈(1~m),且gcd(x,y)=k的(x,y)的对数。

而这个k是给定的。

可以由莫比乌斯反演得到:(详见●HDU 1695 GCD

ANS=nd=1μ(d)×nd×md


但是本题的k是所有的质数,额...

我们可以先枚举一个质数p,然后仿照上面的做法,可以得到:

ANS=\sum_p \sum_{d=1}^{n}\mu(d)\times\lfloor\frac{n/p}{d}\rfloor\times\lfloor\frac{m/p}{d}\rfloor

这个复杂度还无法满足本题的数据。

然后把上面的求和式做如下化简:

T=pd

那么:ANS=\sum_{T=1}^{n}{(}{\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor} \sum_{p|T}\mu(\frac{T}{p}){)}

如果可以预处理出\sum_{p|T}\mu(\frac{T}{p})的值,

那么上式就可以O(n)求出,

如果运用向下取整的特性进行分块计算,就可以达到O(\sqrt{n})的复杂度。

至于\sum_{p|T}\mu(\frac{T}{p}),有两种求法:

sum[T]=\sum_{p|T}\mu(\frac{T}{p})

1.枚举每个质数p,然后把他的倍数T=\lambda p的sum[T]+=\mu(\frac{T}{p})

2.运用\mu是积性函数的性质,可以在线型筛时求出。

代码:

  

posted @   *ZJ  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
阅读排行:
· 我干了两个月的大项目,开源了!
· 推荐一款非常好用的在线 SSH 管理工具
· 千万级的大表,如何做性能调优?
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· .NET周刊【1月第1期 2025-01-05】
点击右上角即可分享
微信分享提示