web-dev-qa-db-ja.com

2つの数値が素数(比較的素数)であるかどうかを効率的に確認しますか?

Pythonで2つの数値が素数(比較的素数)であるかどうかをテスト/チェックする最も効率的な( "Pythonic")方法は何ですか。

当分の間、私はこのコードを持っています:

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

2つの数値が比較的素数であるかどうかをチェック/テストするためのコードを「Pythonic」と見なすことができますか、それとももっと良い方法がありますか?

10
Erba Aitbayev

改善のための唯一の提案はあなたの関数gcdに関するものかもしれません。つまり、速度を上げるためにgcd(Python 3.5の場合)で定義されている math を使用できます。

gcdの組み込みバージョンを使用するcoprime2の定義:

from math import gcd as bltin_gcd

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

Cmath.gcdが実装されているため、実行速度がほぼ半分になります( math_gcdmathmodule.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

Python <= 3.4の場合、fractions.gcdを使用できますが、@ user2357112のコメントに記載されているように、Cには実装されていません。実際には、実際にそれを使用するインセンティブは本当にありません その実装はあなたのものとまったく同じです