【问题标题】:Find the no of pairs with gcd 1 efficiently有效地找到具有 gcd 1 的对数
【发布时间】: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


【解决方案1】:

如果数字的大小在$O(n)$中,可以使用下面的方法在$O(nlog(n))$中做(来自here):

高效方法:一种有效的解决方案是生成给定数组中整数的所有质因子。使用 hash,存储每个元素的计数,它是数组中任何数字的质因子。如果该元素不包含与其他元素的任何共同质数因子,则它始终与其他元素形成互质数对。 生成素因子请看文章Prime Factorization using Sieve in O(log n)

您也可以在该源代码中找到该算法的 C++ 实现。

此外,如果您的预计算受限,您可以使用O(\sqrt(n)) 进行质因数分解,您的算法将在O(n\sqrt(n)) 中。

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多