Une façon est de calculer leur GCD et vérifier si elle est 1.Quel est le moyen le plus rapide de vérifier si deux nombres donnés sont en coprime?
est-il un moyen plus rapide?
Une façon est de calculer leur GCD et vérifier si elle est 1.Quel est le moyen le plus rapide de vérifier si deux nombres donnés sont en coprime?
est-il un moyen plus rapide?
L'algorithme Euclidien (calcule gcd
) est très rapide. Lorsque deux nombres sont tirés au hasard uniformément de [1, n]
, le nombre moyen d'étapes pour calculer leur gcd
est O(log n)
. Le temps de calcul moyen requis pour chaque étape est quadratique en nombre de chiffres.
Il existe des alternatives qui fonctionnent un peu mieux (c'est-à-dire que chaque étape est sous-quadratique dans le nombre de chiffres), mais elles ne sont efficaces que sur de très grands entiers. Voir, par exemple, On Schönhage's algorithm and subquadratic integer gcd computation.
Si vous utilisez une machine pour laquelle la division/le reste est significativement plus cher que les quarts de travail, considérez binary GCD.
Merci, intéressant lecture –
ouais, un très bon article là. – Lazer
Juste implémenté cela en f # et son plus de 2x plus rapide que le GCD Euclid traditionnel, ne peut pas donner de nombres exacts car il y a d'autres codes qui poluent mes mesures, cependant c'est> 2x plus rapide. Bonne trouvaille Jason. – gatapia
Je voudrais commenter que c'est un peu grossier de mesurer la complexité des algorithmes arithmétiques sans prendre en compte les coûts des opérations arithmétiques. –
Le nombre de pas de maléfice est également O (log n), lorsque deux nombres sont des entrées successives dans la séquence de Fibonacci. –
@Pavel Shved: J'ai pris en compte le coût. cf. la phrase "Le temps de calcul moyen requis pour chaque étape est quadratique dans le nombre de chiffres." – jason