【发布时间】:2014-03-15 06:59:41
【问题描述】:
是否有可能在不使用任何标准 GCD 算法的情况下知道两个给定数字是否互质?我使用了欧几里得、二进制 GCD 和 Lehmer 算法。如果可能的话,建议一种比这些更快的方法。这两个数字可以大到 10^5,因此生成法雷数列也没有用。
【问题讨论】:
-
需要多快?仅在 c# 中使用互质测试的基本 GCD 实现,对于最大范围为 32 位整数的随机整数平均只需要大约 110 纳秒。在你提到的范围内,时间会更短。
-
我得到了一个数字数组,数组的大小可以达到 10^5 并且数组中的每个数字可以最大为 10^5。这就是我想避免 GCD 实现的原因
-
我的观点是 GCD 在性能方面并没有那么糟糕。发布您迄今为止最快的代码。它可能不是 GCD,它可能是你的实现。有一些方法可以提高性能。例如,这个初始位旋转
(x | y) & 1可以过滤掉两个数字都是偶数的情况,这应该是给定随机输入的 25% 的时间,并且几乎不需要任何时间。 -
@hatchet ideone.com/uYCeiN 它只有 gcd 代码 sn-p