1 条题解
-
0
问题分析
本题要求计算所有植物到能量汇集机器(坐标)的能量损失总和。能量损失的关键在于确定植物与连线上的植物数量,损失为。
核心观察:
- 两点和连线上的植物数量,等价于满足“存在,使得是和的公因数”的情况数。更准确地说,(因为表示连线上除端点外的植物数量,所以总植物数为)。
- 能量损失为。
因此,总能量损失可表示为:
$$\sum_{x=1}^n \sum_{y=1}^m (2\gcd(x,y) - 1) = 2\sum_{x=1}^n \sum_{y=1}^m \gcd(x,y) - nm $$问题转化为计算,再通过上述公式得到最终结果。
莫比乌斯反演推导
我们需要计算。
利用数论中的结论,通过莫比乌斯反演和整除分块优化:
- 令,表示恰好为的对数。
- 则即为所求的。
进一步推导:
- 令$g(d) = \sum_{k=1}^{\lfloor \min(n,m)/d \rfloor} f(kd)$,即是的倍数的对数,显然$g(d) = \lfloor \frac{n}{d} \rfloor \cdot \lfloor \frac{m}{d} \rfloor$。
- 根据莫比乌斯反演,$f(d) = \sum_{k=1}^{\lfloor \min(n,m)/d \rfloor} \mu(k) \cdot g(kd)$,其中是莫比乌斯函数。
最终,$\sum_{d=1}^{\min(n,m)} d \cdot f(d) = \sum_{d=1}^{\min(n,m)} d \cdot \sum_{k=1}^{\lfloor \min(n,m)/d \rfloor} \mu(k) \cdot \lfloor \frac{n}{kd} \rfloor \cdot \lfloor \frac{m}{kd} \rfloor$。
令,则上式可转化为$\sum_{t=1}^{\min(n,m)} \lfloor \frac{n}{t} \rfloor \cdot \lfloor \frac{m}{t} \rfloor \cdot \sum_{d|t} d \cdot \mu(\frac{t}{d})$。
注意到是积性函数,且其值等于(欧拉函数)。因此,最终简化为:
$$\sum_{t=1}^{\min(n,m)} \lfloor \frac{n}{t} \rfloor \cdot \lfloor \frac{m}{t} \rfloor \cdot \varphi(t) $$算法实现
代码中通过整除分块和预处理欧拉函数的思想(代码中通过类似筛法的方式计算,其本质等价于欧拉函数的贡献)来高效计算上述求和式:
- 枚举从到,计算$f[d] = \lfloor \frac{n}{d} \rfloor \cdot \lfloor \frac{m}{d} \rfloor - \sum_{k=2d}^{n} f[k]$(这里利用了容斥,减去所有是倍数的情况,等价于莫比乌斯反演的推导)。
- 最终结果通过得到,其中是原式中“”的累加(总共有项,每项减)。
该方法的时间复杂度为,可高效处理的数据规模。
算法标签
- 数论(莫比乌斯反演)
- 整除分块
总结
本题通过数论中的莫比乌斯反演和欧拉函数,结合整除分块的优化思想,将复杂的双重求和问题转化为可高效计算的形式,最终在线性时间复杂度的级别内解决了问题。
- 1
信息
- ID
- 4968
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者