2017-05-19 4 views
0

나는이 주제에 대한 여러 가지 오래된 글을 살펴 보았고, 어떤 식 으로든 나를 혼란스럽게 만들었다. 그래서 나는 처음부터 시작할 것입니다.PYTHON : n 번째 소수 찾기

문제는 프로젝트 오일러 # 7이며 문제를 해결하기 위해 노력하는 상당히 새로운 프로그래머입니다. # 7은 다음과 같습니다.

처음 6 개의 소수 : 2, 3, 5, 7, 11 및 13을 나열하면 여섯 번째 소수가 13임을 알 수 있습니다. 10,001 번째 소수는 무엇입니까?

제 문제는 다음과 같습니다. 소수가 무엇인지, 어떻게 작동하는지 명확하게 이해합니다.

For n in range(3,n) #where n is some very large value. 
if n%i ==0 for i in range(2,n-1) 
return False 
if n%i == 0 for i == n 
return True 

하지만 내가 원하는 것을 찾는 나를 방해되는 파이썬에 올 때 나는 내 지식의 부족을 생각 :이 문제에 대한 작성합니다 sudo는 코드는 이것이다.

내가 본 다른 솔루션의 대부분은 n을 125000과 같은 것으로 제한하며 정직하게도 그 번호를 가진 곳을 찾지 못했습니다.

다른 문제는 범위를 통해 올바르게 검색하고 목록의 최대 값을 확인할 수있는 방식으로 관계를 충족시키는 값 목록을 만드는 방법을 모르겠다는 것입니다.

나에게 가장 이해하기 쉬운 것은 기본적으로 각 새 소수를 목록에 추가 한 다음 최대 값을 가져 오는 것이지만 더 빠르고 더 좋은 방법이 있다고 확신합니다. 답을 얻으려면 파이썬 테크 놀블에 뛰어 들지 않고 건강한 설명을 포함 시키십시오. 기억해 봅시다. 프로그래밍 초보자입니다.

저는 사람들이 이것과 같은 질문을하는 전형적인 방법은 질문자가 옳은 대답을 찾도록 자극하는 것이라고 알고 있습니다. 나는 그것을 원하지 않습니다. 누군가에게 나에게 해결책을 보여주고 코드의 각 부분이 무엇을 설명하는지 단계별로 설명하여 문제 해결 방법뿐만 아니라 파이썬의 작동 방식을 더 잘 이해할 수있게 해달라고합니다.

감사합니다.

+0

: 여기

은 샘플 코드입니다. 아니면이 답변을 참조 할 수 있습니다 [빠른 방법 - 목록 - 모든 - 소수 - 아래 - n] (http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below- n) – Pavan

+0

@ Pavan 그는 이미 프라임을 처리하는 적절한 패키지를 사용하지 않으려 고 생각합니다. –

+0

@PhungDuyPhong은 동일한 작업을 수행하는 서로 다른 알고리즘이 존재하고 서로 비교되는 링크를 추가했습니다. – Pavan

답변

1

이 작업은 기본적으로 10001 소수를 수집하도록 요청합니다. 그러니 소수 목록을 작성하고 10001 번째 숫자에이를 때까지 시작하십시오. `next_prime은 n 번째 총리를 얻을 수 있습니다()`방법이있다, 당신이 한 번 봐 걸릴 수 있습니다`gmpy2` 모듈이 있습니다

def is_prime(n): 
    for i in range(3, n): 
     if n % i == 0: 
      return False 
    return True 

primes = [] # list of primes 
x = 10001 # go to the nth-number 
n = 2 # start at number 2 

while len(primes) != x+1: # is n-th number on the list? +1 is because list is zero-based 
    if is_prime(n): 
     primes.append(n) # add prime to the list 
    n+=1 # increment n to check the next number 

# print the last item in the list - the n-th number 
print(primes[-1]) 
+0

당신은 'n/2'에만 소수의 검사를 줄일 수 있습니다, 나는 그것이 빠를 것이라고 생각합니다 –

+0

당신은 어떻게 알 수 있습니까? 나는 사람들이 온라인으로 당신이 sqrt (n)까지 확인할 수 있다고 말한다. 그러나 나는 왜 그런지 확실히 알고있다. –