私はこの問題を数日前のインタビューで尋ねられましたが、その間に与えた解決策を改善したかったのです。これまでのところこれが私の持っているものです。より効率的にする方法についてはわかりません。私は初心者のために推測します:この関数を改善して素数を決定するにはどうすればよいですか?
1)i%2 == 0行を追加すると時間が節約できますか?
2)Pythonでの%演算子の時間複雑度はどのくらいですか? %を使用せずに、ある数値がより速く割り切れるかどうかをチェックする方法はありますか?
3)d = 1になるまでdが正しく分割されないため、d < = math.sqrt(i)は、iの平方根を超える除数を計算することは無意味であるという事実を利用しています。これは最適なステップ数を示していますか?
4)私が
5奇数であることを考えるているため、私は、D = 3で開始)4点をオフに行くiが奇数であると仮定されているので、私は、2の代わりに1ずつ増加。
def is_prime(i):
if i < 2:
return False
if i == 2:
return True
d = 3
if i%2 == 0: #skip even numbers
return False
while d <= math.sqrt(i):
if i%d == 0:
return False
d += 2
return True
Code Review stackexchangeに適している場合があります。同様の[質問はこちら](https://stackoverflow.com/a/15285588/314291)。はい、%2 == 0は一般に有益です。このアプローチは、3,5などのより高い素数に拡張し、 '6/30/120'のホイールなどとして最適化することができます。また、最適化として最初のN個の素数のキャッシュを構築することもできます。 – StuartLC