2016-12-18 7 views
0

숫자, x가 소수인지 아닌지를 결정할 때 약간의 문제가 있습니다. X는 임의로 생성 된 양수되며 나 코드를 실행할 때 다음과 같은 메시지를 얻을 :임의 Int가 소수인지 여부를 확인

Your function fails on is_prime(2). It returns None when it should return True. 

내 코드 :

def is_prime(x): 
if x < 2: 
    return False 
else: 
    for n in range(2, x): 
     while x % n == 0: 
      return False 
      break 
     else: 
      return True 

내가 while 루프는 N 개의 == 최대 2 반복 할 n == (x-1)로 바꾸지 만 그럴 수는 없습니다! 무엇이 잘못 되었나요?

당신은이 기능을 훨씬 더 간단 쓸 수
+0

"while 루프를 n == 2에서 n == (x-1)까지 반복 할 때"- for 루프의 작업이 아닌가? – user2357112

+0

네, for 루프가 미안하다는 것을 의미합니다 :) –

+1

왜 while 루프에 넣었습니까? – user2357112

답변

0

는 :

import math 
def is_prime(n): 
    if n % 2 == 0 and n > 2: 
     return False 
    for i in range(3, int(math.sqrt(n)) + 1, 2): 
     if n % i == 0: 
      return False 
    return True 

그래서 is_prime에 대한 전화 (2) 테스트 경우를 통과하지 것이다 및 실행을 위해 사용할 수 없습니다 것이 바로 진정한 반환 .

다른 모든 소수는 3보다 크고 짝수가 아니면 테스트해야합니다.

+0

if (n % 2 == 0) : return n == 2 또는 if (n <= 2) : return n == 2)'mod와 sqrt를 저장합니다. – rossum