【发布时间】:2020-04-29 14:01:47
【问题描述】:
给定 2 个长度为 n、a 和 b 的数组,我想在小于 O(n^2) 的情况下找到 Gcd(a[i], b[j]) == 1 的对数。
编辑:看看this
【问题讨论】:
-
你已经尝试了什么?
标签: c++ algorithm c++11 math data-structures
给定 2 个长度为 n、a 和 b 的数组,我想在小于 O(n^2) 的情况下找到 Gcd(a[i], b[j]) == 1 的对数。
编辑:看看this
【问题讨论】:
标签: c++ algorithm c++11 math data-structures
如果数字的大小在$O(n)$中,可以使用下面的方法在$O(nlog(n))$中做(来自here):
高效方法:一种有效的解决方案是生成给定数组中整数的所有质因子。使用 hash,存储每个元素的计数,它是数组中任何数字的质因子。如果该元素不包含与其他元素的任何共同质数因子,则它始终与其他元素形成互质数对。 生成素因子请看文章Prime Factorization using Sieve in O(log n)。
您也可以在该源代码中找到该算法的 C++ 实现。
此外,如果您的预计算受限,您可以使用O(\sqrt(n)) 进行质因数分解,您的算法将在O(n\sqrt(n)) 中。
【讨论】: