问题描述
由于Y <= 100000的数字最多可以具有6个不同的素数因子,因此每个Y 2的因子对少于4064个。平均大约100。
这导致了O(N)算法…它的系数为x000,但是对于大型输入,它仍然比O(N 2)解决方案要快:
- 建立一个散列图,给出数组中每个数字的频率(O(N))
- 对于每个数字Y,将其完全分解,并为Y 2生成每个可能的因子对。为了将Y分解,可以用小于316的素数进行试验除法。
- 对于每一对,检查频率表以查看它们是否除了Y之外还出现。请注意,Y是Y 2的因数,对于这一对,您必须检查Y是否出现至少3次。
另外,您只需要检查哈希图的键,其中最多有100000个键。即使数组中每个数字<= 100000,也要检查少于700万个因子对。
解决方法
如何找到 三胞胎 ,形成一个 数组 ,
(X 1,X 2,Y),
这样
X 1 * X 2 = Y 2
结果中不能有任何重复,并且元素的范围是10 5
我已经尝试过通过 结合所有方式来 做到这一点,但我想要一种 有效的方法 …