2013-12-19 2 views
1

정수 x를 취하여 소수를 True로 반환하는 함수를 작성하려고합니다. 그렇지 않으면 False를 반환합니다. 121 번을 테스트 할 때를 제외하고는 제대로 작동합니다. 이유는 알 수 없습니다. 121%11은 0이지만,이 같은 False를 반환하지 않기 때문에,is_prime 함수가 테스트 할 때 실패 121, 이유를 모르겠다

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

(121)을 확인,이 if x%i == 0: 건너 뛸 것 : 여기 내 코드입니다. 내가 여기서 뭔가 분명한 것을 놓치고 있니? 고마워. 고마워. 고마워. 고마워. 아, 파이썬 2.7에서 일하고 있습니다.

+0

@VincentShowcaseWorkshop 아니요. 연결된 질문에 대한 모든 대답은 평가판 나누기를 사용합니다. 이는 시험 번호가 복합 또는 소수인지 확인하는 최악의 방법입니다. – Hyperboreus

+0

그런 다음 내 의견을 삭제하여 잘못된 길로 올려주지 마십시오. –

답변

8

거의 가지고 있습니다. 당신은 하나의 작은 변화를 필요

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

당신이 직면하고있는 문제는 당신이 당신의 루프가 때 처음 몇 반복을 고려

을 반환하기 전에 모든 번호를 확인 완료하는 것을 허용하지 않습니다 때문이다 당신은 (121)에 코드를 실행

기능은 말한다 :

  • 2보다 x 작은가요?
    • 번호
  • x 정확히 2에 이동? 통한 모든 숫자
  • , 2
    • 호 이동 X-1 (for i in range(2,x))
      • 지금 i 2
      • 가있다 121 % 2 정확히 0?
        • 없음.
          • 반환 진정한 다른
        • (물론 121 % 2가 0이 아닌, 그래서 내가 여기에 이동) <에 이동 - 아차!

  • 그래서 당신이 무엇을해야하는지, 내 수정이 무엇 인 복귀를 결정하기 전에, 루프 점에서 모든 번호를 통해 실행 완료입니다.

    물론 (Joran Beasley가 말한 것처럼) 어떤 숫자의 제수도 제곱근보다 크지 않다는 지식을 활용할 수 있습니다. 따라서 번호 자체의 제곱근을 검사하면됩니다.

    +5

    그는 int (sqrt (x))에서 자신의 범위를 끝내야한다는 점에 유의할 가치가있다. –

    +0

    오 사실! 그는 이미 2 – inspectorG4dget

    +0

    에 대한 테스트를하고 있기 때문에'range (3, int (sqrt (x)) '에 더 걸릴 것입니다.하지만 2로 나누기 테스트를하지는 않습니다 ... Im missing it –

    관련 문제