1 条题解
-
0
题意简化
求满足以下条件的三元组 数量:
- , ,
,模 。
代码核心思路
1. 莫比乌斯反演
使用莫比乌斯函数 处理互质条件。
2. 分情况计算
代码将答案分为三部分:
第一部分:
即 的共同因子 。
$$\text{ans}_1 = \sum_{d=1}^{\min(a,b,c)} \mu(d) \cdot \lfloor \frac{a}{d} \rfloor \cdot \lfloor \frac{b}{d} \rfloor \cdot \lfloor \frac{c}{d} \rfloor $$其中 的取值:
- (质因子各不同)
- 有平方因子时为
代码中将 存储为 。
第二部分:两个数相等,第三个数不同
即 , , 中有两个相等。
设 ,其中 是某两个 的值。
对于每个 ,枚举其因子 ( 且 ),计算贡献:
- 已算过
- 两个相等,一个不同
贡献公式为:
$$\sum \mu(\cdot) \cdot \lfloor \frac{a}{\cdot} \rfloor \cdot \lfloor \frac{b}{\cdot} \rfloor \cdot \lfloor \frac{c}{\cdot} \rfloor $$有 6 种对称情况。
第三部分: 两两不同
即 , , 互不相同。
需要找三元组 满足:
- 是某些数的
- , , 存在对应关系
代码通过图枚举实现:
- 以 为点
- 如果 ,则在 和 间连边,边权为
- 找三元环 ,计算贡献
3. 算法流程
-
预处理(
Init):- 线性筛求
- 预处理每个数的质因子列表
fac[i]
-
排序(
calc):- 将 排序使得
-
三部分计算:
- 第一部分:直接求和
- 第二部分:枚举 ,用状压枚举因子对
- 第三部分:建图找三元环
-
三元环计数优化:
- 按度数排序,只从度数小的点出发
- 复杂度 , 为边数
关键优化
- 莫比乌斯函数预处理:线性筛
- 因子枚举:利用质因子列表状压枚举
- 三元环计数:定向边技巧,避免
- 整除分块思想:用
a/L等形式快速计算
复杂度分析
- 预处理:
- 第一部分:
- 第二部分:, 是 的质因子数,实际很小
- 第三部分:,边数 不大
对于 可过。
代码特点
- 使用莫比乌斯反演处理互质条件
- 分三类情况讨论,避免重复计数
- 三元环计数用于处理最复杂情况
- 模运算优化:用减法代替取模
- 1
信息
- ID
- 6009
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者