14

整数の素数をチェックする簡単なアルゴリズムを書いていますが、この Java コードを Python に変換する際に問題が発生しています。

for (int i = 3; i < Math.sqrt(n); i += 2) {
    if (n % i == 0)
        return false;
}

だから、私はこれを使おうとしてきましたが、明らかに3による除算をスキップしています:

i = 3
while (i < int(math.sqrt(n))):
    i += 2  # where do I put this?
    if (n % i == 0):
        return False
4

4 に答える 4

22

Pythonの唯一のfor-loop は、技術的には「for-each」であるため、次のようなものを使用できます

for i in xrange(3, int(math.sqrt(n)), 2):  # use 'range' in Python 3
    if n % i == 0:
        return False

もちろん、Python はそれよりも優れています。

all(n % i for i in xrange(3, int(math.sqrt(n)), 2))

同様に同等です(return trueそのJavaループの最後に a があると仮定します)。実際、後者はそれにアプローチするPythonicの方法と見なされます。


参照:

于 2013-07-01T23:26:34.410 に答える
4

直訳すると次のようになります。

for i in range(3, int(math.sqrt(n)), 2):
    if n % i == 0:
        return False
于 2013-07-01T23:26:38.723 に答える
2

Java for ループでは、ステップ (i += 2例の部分) はループの最後で、繰り返される直前に発生します。while に変換すると、for ループは次のようになります。

int i = 3;
while (i < Math.sqrt(n)) {
    if (n % i == 0) {
        return false;
    }
    i += 2;
}

Pythonのどれが似ていますか:

i = 3
while i < math.sqrt(n):
    if n % i == 0:
        return False
    i += 2

ただし、パラメータxrangeを指定できるPython の関数を使用すると、これをより "Pythonic" にして読みやすくすることができます。step

for i in xrange(3, math.sqrt(n), 2):
    if n % i == 0:
        return False
于 2013-07-01T23:30:38.987 に答える
1

基本的な Pythonfor i in rangeループを使用します。

for i in range(3, math.round(math.sqrt(x)), 2):
    if (n % i == 0):
        return false
于 2013-07-01T23:26:41.083 に答える