У меня есть набор из многих рациональных чисел с числителем и знаменателем каждого из них, которые хранятся в виде большого (сотни или тысячи бит) целых чисел без знака. Я хотел бы иметь возможность эффективно проверить, равно ли любое заданное рациональное число a/b
в множестве любое другое рациональное число c/d
в наборе.
Самый простой метод - проверить, будет ли a*d == b*c
, конечно, но я бы хотел что-то более эффективное, чем вычисление полных продуктов.
Некоторые примечания по моему конкретному случаю использования:
- Пар, которые я буду тестировать, имеет высокую вероятность быть равным (потому что я уже предварительно вычисляю и сравниваю их по их приближениям с плавающей запятой), поэтому ранние выходы, если они неравны, не спасут меня много времени.
- Я в порядке с предварительным вычислением дополнительных данных для каждого из чисел, но каждый номер будет использоваться только в нескольких сравнениях, поэтому дорогостоящая предварительная вычисление (такая как простая факторизация), вероятно, не стоит.
- Иногда ложные негативы бывают прекрасными, но ложных срабатываний нет.
Я думаю, что это может быть теоретически невозможно, но на всякий случай выбросить его в улей.