高效检查两个数字是否为共素(相对素数)?

时间:2016-09-24 17:18:07

标签: python algorithm python-3.x primes relative

最有效(" pythonic")测试/检查 Python 中的两个数字 co-primes (相对素数)的方法是什么?

目前我有这段代码:

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

可以考虑检查/测试两个数字是否相对素数的代码" Pythonic"还是有更好的方法?

1 个答案:

答案 0 :(得分:11)

唯一的改进建议可能是您的功能gcd。也就是说,您可以使用math(针对Python 3.5)中定义的gcd来提高速度。

定义使用coprime2内置版本的gcd

from math import gcd as bltin_gcd

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

由于在math.gcdsee math_gcd in mathmodule.cC中实施%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 这一事实,您几乎将执行速度降低了一半:

<= 3.4

对于Python fractions.gcd,您可以使用C,但正如@ user2357112的评论中所述,它未在MissingUsernameError: No username was given中实现。实际上,真的没有动力去实际使用它,its implementation is exactly the same as yours.