微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从数组X1,X2,Y中查找三元组,使得X1 * X2 = Y ^ 2

如何解决从数组X1,X2,Y中查找三元组,使得X1 * X2 = Y ^ 2

由于Y <= 100000的数字最多可以具有6个不同的素数因子,因此每个Y 2的因子对少于4064个。平均大约100。

这导致了O(N)算法…它的系数为x000,但是对于大型输入,它仍然比O(N 2)解决方案要快:

  1. 建立一个散列图,给出数组中每个数字的频率(O(N))
  2. 对于每个数字Y,将其完全分解,并为Y 2生成每个可能的因子对。为了将Y分解,可以用小于316的素数进行试验除法。
  3. 对于每一对,检查频率表以查看它们是否除了Y之外还出现。请注意,Y是Y 2的因数,对于这一对,您必须检查Y是否出现至少3次。

另外,您只需要检查哈希图的键,其中最多有100000个键。即使数组中每个数字<= 100000,也要检查少于700万个因子对。

解决方法

如何找到 三胞胎 ,形成一个 数组

(X 1,X 2,Y),

这样

X 1 * X 2 = Y 2

结果中不能有任何重复,并且元素的范围是10 5

我已经尝试过通过 结合所有方式来 做到这一点,但我想要一种 有效的方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。