我有许多有理数的集合,每个有理数的分子和分母都存储为一个大(数百或数千位)无符号整数。我希望能够有效地测试a/b
集合中的任何给定有理数是否等于集合中的任何其他有理数c/d
。
最直接的方法是测试是否a*d == b*c
,当然,但我想要比计算完整产品更有效的方法。
关于我的特定用例的一些说明:
- 我将要测试的对很有可能实际上是相等的(因为我已经预先计算并首先通过它们的浮点近似值比较它们),所以如果它们不相等,那么早出线不会为我节省太多时间。
- 我可以为每个数字预先计算额外的数据,但每个数字只会用于少数比较,因此昂贵的预先计算(例如素数分解)可能不值得。
- 偶尔的假阴性会很好,但假阳性则不然。
我认为这在理论上可能是不可能的,但为了以防万一,把它扔给蜂巢头脑。