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」と見なすことができますか、それとももっと良い方法がありますか?
改善のための唯一の提案はあなたの関数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
C
にmath.gcd
が実装されているため、実行速度がほぼ半分になります( math_gcd
の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
Python <= 3.4
の場合、fractions.gcd
を使用できますが、@ user2357112のコメントに記載されているように、C
には実装されていません。実際には、実際にそれを使用するインセンティブは本当にありません その実装はあなたのものとまったく同じです