Blog Full Notice
back to main page

최대 1 분 소요

motivation: 네이버 블로그

#프로젝트 오일러 문제 10: 이백만 이하 소수의 합을 구하시오. : 네이버 블로그

프로젝트 오일러 문제 10: 이백만 이하 소수의 합을 구하시오.

프로파일 무지성 2021. 8. 11. 16:48
URL 복사 이웃추가
#problem10_try1.py ''' 10 이하의 소수를 모두 더하면 2 + 3 + 5 + 7 = 17 이 됩니다. 이백만(2,000,000) 이하 소수의 합은 얼마입니까? ''' def primenumlist(n): sieve=[True]*(n+1) for i in range(2,int(n**0.5+1)): if sieve[i]==True: for j in range(i**2,n+1,i): sieve[j]=False return [i for i in range(2,n+1) if sieve[i]==True] primenumadd=0 alpha=primenumlist(2000000) for i in alpha: primenumadd+=i print(primenumadd)

정답: 142913828922

문제 푸는데 총 16분 30초가 걸렸다. 알고리즘이 에라토스테네스의 채를 통해서 소수가 있는 리스트만 뽑으면 될 줄 알았는데, 소수 리스트를 전부 더하는 코드에서 막혔다.

처음에는

primenumadd=0 i=0 while i<len(primenumlist(2000000)): primenumadd+=primenumlist(2000000)[i] print(primenumadd)

이렇게 했는데 완전 어리석은 생각이었다. for i in primenumlist 하고 i를 다 더해주면 쯭나는 것을 컴퓨터로 하여금 list의 값 개수를 세도록 했다.

어쨋든 수정한 풀이로 코드를 돌리면 답은 순식간에 나온다.

댓글남기기