AttackOnNunu

Once more into the fray


  • 홈

  • About

  • 태그

  • 카테고리

  • 아카이브

  • 검색

(Problem) 009 Special Pythagorean triplet

작성일 2020-03-25 In Project Euler 댓글:

Project Euler

  • 공식 홈페이지 - projecteuler.net
  • 한글 번역 - projecteuler @kr
  • (HackerRank) ProjectEuler+ - hackerrank.com

Problem

Problem list
  • No 9 : Special Pythagorean triplet
    • HackerRank : Project Euler 9: Special Pythagorean triplet
더 읽어보기 »

(Problem) 008 Largest product in a series

작성일 2020-03-23 In Project Euler 댓글:

Project Euler

  • 공식 홈페이지 - projecteuler.net
  • 한글 번역 - projecteuler @kr
  • (HackerRank) ProjectEuler+ - hackerrank.com

Problem

Problem list
  • No 8 : Largest product in a series
    • HackerRank : Project Euler #8: Largest product in a series
더 읽어보기 »

(Problem) 007 10001st prime

작성일 2020-03-23 In Project Euler 댓글:

Project Euler

  • 공식 홈페이지 - projecteuler.net
  • 한글 번역 - projecteuler @kr
  • (HackerRank) ProjectEuler+ - hackerrank.com

Problem

Problem list
  • No 7 : 10001st prime
    • HackerRank : Project Euler #7: 10001st prime

10001st prime


problem <번역>

solution

Simple Code

특정한 숫자가 소수인지 판별하는 것이 아니라 계속해서 소수를 찾아가면서 몇 번째인지 찾는게 어려웠다ㅠ
굉장히 Brute Force 적인 방식으로 풀었다(그래서 시간이 오래 걸린다)

007_10001st_prime.py
def nth_prime(idx):
primes = [2, 3]
pivot = 6

while len(primes) < idx:
is_prime = True
for prime in primes:
if int(pivot-1) % int(prime) == 0: # 5, 11, 17, ...
is_prime = False
break

if is_prime:
primes.append(pivot-1)

is_prime = True
for prime in primes:
if int(pivot+1) % int(prime) == 0: # 7, 13, 19, ...
is_prime = False
break

if is_prime:
primes.append(pivot+1)

pivot += 6

return primes[-1]


print(nth_prime(10001))

sympy 모듈을 사용하면 매우 간단하게 구현 가능하다

007_with_sympy.py
from sympy import prime

print(prime(10001))

HackerRank

해커랭크 풀이

007_for_HacerRank.py
def sieve_of_eratosthenes(n):
sieve = {}
prime = 2
cnt = 0

while cnt < n:
if prime not in sieve:
yield prime
cnt += 1
sieve[prime * prime] = [prime]
else:
for p in sieve[prime]:
sieve.setdefault(p + prime, []).append(p)
del sieve[prime]
prime += 1


if __name__ == '__main__':
lin = []
for _ in range(int(input())):
lin.append(int(input()))

primes = list(sieve_of_eratosthenes(max(lin)))
for i in lin:
print(primes[i - 1])

생각보다 너무 어려웠다ㅠ

123…33
NUNU

NUNU

개인적으로 공부하면서 정리한 내용들을 블로그에 남기고 있습니다.
99 포스트
18 카테고리
53 태그
RSS
Creative Commons
© 2021 NUNU
Powered by Hexo v3.9.0
|
Theme – NexT.Mist v7.2.0