Efficiently check if two numbers are co-primes (relatively primes)?

32,267

The only suggestion for improvement might be with your function gcd. Namely, you could use gcd that's defined in math (for Python 3.5) for a speed boost.

Defining coprime2 that uses the built-in version of gcd:

from math import gcd as bltin_gcd

def coprime2(a, b):
    return bltin_gcd(a, b) == 1

You almost cut down execution speed by half due to the fact that math.gcd is implemented in C (see math_gcd in 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

For Python <= 3.4 you could use fractions.gcd but, as noted in a comment by @user2357112, it is not implemented in C. Actually, there's really no incentive to actually use it, its implementation is exactly the same as yours.

Share:
32,267
Erba Aitbayev
Author by

Erba Aitbayev

IT specialist.

Updated on July 05, 2022

Comments

  • Erba Aitbayev
    Erba Aitbayev almost 2 years

    What is the most efficient ("pythonic") way to test/check if two numbers are co-primes (relatively prime) in Python.

    For the moment I have this 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
    

    Can the code for checking/testing if two numbers are relatively prime be considered "Pythonic" or there is some better way?

  • user2357112
    user2357112 over 7 years
    There isn't nearly as much of a benefit on pre-3.5, though, since fractions.gcd was written in Python instead of C.
  • İbrahim İpek
    İbrahim İpek almost 5 years
    Old question but math module functions in Python usually are no good for big numbers. It may crash. I would go for something like SymPy or PARI/GP