2010-06-12 11 views
0

이것이 작동하지 않는 이유를 알 수 없습니다. 나에게소수의 n 번째 숫자 찾기

from math import sqrt 

pN = 0 
numPrimes = 0 
num = 1 

def checkPrime(x): 
    '''Check\'s whether a number is a prime or not''' 
    prime = True 
    if(x==2): 
     prime = True 
    elif(x%2==0): 
     prime=False 
    else: 
     root=int(sqrt(x)) 
     for i in range(3,root,2): 
     if(x%i==0): 
      prime=False 
      break 
    return prime 

n = int(input("Find n number of primes. N being:")) 

while(numPrimes != n): 
    if( checkPrime(num) == True): 
     numPrimes += 1 
     pN = num 
     print("{0}: {1}".format(numPrimes,pN)) 
    num += 1 

print("Prime {0} is: {1}".format(n,pN)) 
+3

프로그램에 대해 어떻게 생각하십니까? 그리고 그것은 무엇을합니까? – Guru

답변

5

도와주세요 당신은 int(sqrt(9))3입니다

root=int(sqrt(x)) 

root=int(sqrt(x))+1 

(예를 들어 9을 가지고 변경해야하고, range(3, 3, 2)[], 당신은 정말을 테스트를하고 싶다면 3!).

기술적으로 1은 소수가 아닙니다.

if(x<=1): 
    prime = False 

을 추가하고 당신이 다르게 @Braxton 코멘트에서 말씀에서 http://www.rsok.com/~jrm/first100primes.html

+0

좋은 답변입니다. 조건을 다음과 같이 수정하십시오. if (x <= 1) – AraK

+0

좋은 점 :). – aioobe

+0

완벽하게 작동했습니다! 감사합니다. – Sonryell

1

와 같은 결과를 얻을 수 있습니다, 에라 토 스테 네스 알고리즘의 체는 쉽게 잠재적으로 예 (무제한의 소수를 생성하기 위해 적용 할 수 있습니다 - 무한대 생성기 (예 : itertools.slict으로 원하는대로 축소 할 수 있음).

파이썬에서 무제한의 체에 대한 this recipe을 참조하십시오 (및 광산을 포함, 코멘트에 나타난 개선 사항을 적용해야합니다 ;-) 또는 마지막 불행히도 토론 부분이 축소되어 인쇄 된 요리 책 here (위해 편집 같은 레시피를 참조 이 구글 도서에 히트지만, 적어도 솔루션의 코드는 모두 거기에 있습니다 ;-).

+0

고마워요! 나는 분명히 배울 것이 많지만, 그것은 대단히 도움이되었다. – Sonryell

+0

@Braxton, 너는 환영합니다! –