Quelle est la façon la plus efficace ("Pythonic") de tester/vérifier si deux nombres sont co-premiers (relativement premiers) en Python.
Pour l'instant j'ai ce code:
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def coprime(a, b):
return gcd(a, b) == 1
print(coprime(14,15)) #Should be true
print(coprime(14,28)) #Should be false
Le code de vérification/test si deux nombres sont relativement premiers peut-il être considéré comme "Pythonic" ou existe-t-il une meilleure façon?
La seule suggestion d'amélioration pourrait être avec votre fonction gcd
. À savoir, vous pouvez utiliser gcd
défini dans math
(pour Python 3.5
) pour un boost de vitesse.
Définition de coprime2
qui utilise la version intégrée de gcd
:
from math import gcd as bltin_gcd
def coprime2(a, b):
return bltin_gcd(a, b) == 1
Vous avez presque réduit de moitié la vitesse d'exécution en raison du fait que math.gcd
est implémenté dans C
( voir math_gcd
dans mathmodule.c
):
%timeit coprime(14, 15)
1000000 loops, best of 3: 907 ns per loop
%timeit coprime2(14, 15)
1000000 loops, best of 3: 486 ns per loop
Pour Python <= 3.4
vous pouvez utiliser fractions.gcd
mais, comme indiqué dans un commentaire de @ user2357112, il n'est pas implémenté dans C
. En fait, il n'y a vraiment aucune incitation à l'utiliser réellement, son implémentation est exactement la même que la vôtre.