0

入力が素数かどうかをチェックする関数。ここで何度も取り上げられていることは知っていますが、何らかの理由で私のコードは x=32 に対して True を返し、その理由がわかりません

def is_prime(x):
    if x < 2:
        return False
    elif x == 2:
        return True
    else: 
        for i in range(3,x): #Ignore sqrt(x) improvement
            if x%i == 0:
                return False
            else :
                return True
4

1 に答える 1

1

for i in range(3,x):

これは最初に数字の 3 を使用します。 として32 % 3 != 0、 を返しますTrue。その後、値が返されたため、関数は中断します。

return Truefor ループの後に置くことを検討してください。

for i in range(3,x): #Ignore sqrt(x) improvement
    if x % i == 0:
        return False
return True

現在、数値が割り切れる場合、すぐに壊れて戻りFalseます。しかし、32 に入る数字がない場合、for ループは終了し、 が返されTrueます。

xrange()また、python 2.x を使用している場合は、ジェネレータを返すため、を使用する方が高速です :)。

于 2013-06-09T02:37:45.890 に答える