1 条题解
信息
- ID
- 1417
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
一对数是否为坏对只取决于它们的最大公约数 g:当且仅当数组中存在一个出现过的数整除 g,这对数是坏对。
记 cx 为值 x 的出现次数,sd=∑d∣xcx。那么最大公约数是 d 的倍数的数对共有 (2sd) 对。按 d 从大到小,用
ed=(2sd)−j≥2∑ejd得到最大公约数恰为 d 的数对数。
再从每个出现过的值 x 出发,标记它的所有倍数。未被标记的 d 不含任何出现过的约数,因此把对应的 ed 加入答案。
全质数子任务中,只有两个数相同才会被该质数同时整除,答案为总数对减去每种质数内部的数对。小规模则可枚举数对及见证元素。
独立复核实现使用莫比乌斯反演:eg=∑dμ(d)(2sgd)。
每组时间复杂度 O(nlogn),空间复杂度 O(n)。