Каков самый быстрый способ проверить, являются ли два заданных числа coprime?

один из способов-вычислить их gcd и проверьте, если это 1.

есть ли более быстрый способ?

2 ответов


евклидов алгоритм (вычисляет gcd) очень быстро. Когда два числа рисуются равномерно случайным образом из [1, n], среднее количество шагов для вычисления их gcd is O(log n). Среднее время вычисления, необходимое для каждого шага, квадратично по количеству цифр.

есть альтернативы, которые работают несколько лучше (т. е. каждый шаг является подквадратным по количеству цифр), но они эффективны только для очень больших целых чисел. См., например, на Алгоритм Schönhage и subquadratic целое гкд расчета.


Если вы работаете на машине, для которой деление / остаток значительно дороже, чем сдвиги, рассмотрите двоичный код GCD.