fix solution 2183

This commit is contained in:
halfrost
2022-03-01 10:43:30 -08:00
parent 14f73a9c23
commit 4697dfedeb

View File

@ -44,8 +44,8 @@ Explanation: There does not exist any pair of indices whose corresponding produc
## 解题思路
- 先找出 num 中每个元素与 k 的最大公约数并统计这些公约数出现的频次将数据保存在 map 在计算过程中循环可以只需算到 ${O(\sqrt {k})}$ , 因为每一个 gcd[i] 一定是 k 的因数而它出现的频次不会超过 ${O(\sqrt {k})}$。简单证明一下假设因子 v k/v 这两个因数为 k 的因子v k/v 必至少有 1 个小于等于 $\sqrt {k}$。所以 k 的因子也不会超过 2 * $\sqrt {k}$ = ${O(\sqrt {k})}$
- 算出上述的 map 以后2 层循环暴力遍历 key 如果 a * b 能被 k 整除并且 a b 不相同那么 a b 对应的 value 值相乘即为满足条件的下标对数如果 a b 相同那么下标对数为 $C_{n}^{2}$。最后累加结果即可
- 先找出 num 中每个元素与 k 的最大公约数并统计这些公约数出现的频次将数据保存在 map 在计算过程中循环可以只需算到 {{< katex >}}{O(\sqrt {k})}{{< /katex >}} , 因为每一个 gcd[i] 一定是 k 的因数,而它出现的频次不会超过 {{< katex >}}{O(\sqrt {k})}{{< /katex >}}。简单证明一下:假设因子 v 和 k/v 这两个因数为 k 的因子。v 和 k/v 必至少有 1 个小于等于 {{< katex >}}\sqrt {k}{{< /katex >}}。所以 k 的因子也不会超过 2 * {{< katex >}}\sqrt {k}{{< /katex >}} = {{< katex >}}{O(\sqrt {k})}{{< /katex >}} 个。
- 算出上述的 map 以后2 层循环暴力遍历 key 值,如果 a * b 能被 k 整除,并且 a 和 b 不相同,那么 a 和 b 对应的 value 值相乘即为满足条件的下标对数;如果 a 和 b 相同,那么下标对数为 {{< katex >}}C_{n}^{2}{{< /katex >}}。最后累加结果即可
## 代码