deo2kim
λ§žμ™œν‹€
deo2kim
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • 개발
    • Infra

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

λ°˜μ‘ν˜•
hELLO Β· Designed By μ •μƒμš°.
deo2kim

λ§žμ™œν‹€

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체(Sieve Of Eratosthenes)
CS/Algorithm

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체(Sieve Of Eratosthenes)

2020. 10. 3. 20:43
λ°˜μ‘ν˜•

πŸ“” μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄(Sieve Of Eratosthenes) λž€

  • λŒ€ν‘œμ μΈ μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜ ( μ†Œμˆ˜: Prime Number )
  • ν•œκΊΌλ²ˆμ— λ§Žμ€ 숫자의 μ†Œμˆ˜λ₯Ό νŒλ³„ν•  λ•Œ μ‚¬μš©
  • 숫자 ν•œκ°œμ˜ μ†Œμˆ˜λ₯Ό νŒλ³„ν•˜λŠ” κΈ°λ³Έ μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” O(N)
  • ν•˜μ§€λ§Œ μˆ˜ν•™μ μœΌλ‘œ μ ‘κ·Όν•΄μ„œ μ‹œκ°„λ³΅μž‘λ„λ₯Ό O(N^(1/2)) κΉŒμ§€ 쀄일 수 μžˆλ‹€.
  • μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‹œκ°„λ³΅μž‘λ„λŠ” O(n log log n)

πŸ“” μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄(Sieve Of Eratosthenes) κ΅¬ν˜„

  • μžμ—°μˆ˜ 50κΉŒμ§€μ˜ 숫자 μ€‘μ—μ„œ μ†Œμˆ˜λ₯Ό κ΅¬ν•œλ‹€κ³  μƒκ°ν•΄λ³΄μž.
  • κΈ°λ³Έ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•  경우 O(N*N^(1/2)) 의 μ‹œκ°„λ³΅μž‘λ„κ°€ 생긴닀.
  • μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό μ΄μš©ν•˜μ—¬ κ΅¬ν•΄λ³΄μž.
  • λ¨Όμ € 51개의 값이 1(True)인 리슀트λ₯Ό λ§Œλ“ λ‹€.
  • for문으둜 2λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 자기 μžμ‹ μ„ μ œμ™Έν•˜κ³  μžμ‹ μ˜ 배수의 μˆ«μžλ“€μ€ 0(False)둜 λ§Œλ“ λ‹€.
  • 이미 μžμ‹ μ΄ 0 이라면 κ±΄λ„ˆλ›΄λ‹€.
  • λ¦¬μŠ€νŠΈμ—μ„œ 값이 1인 인덱슀λ₯Ό μΆ”μΆœν•˜λ©΄ κ·Έ μˆ«μžλ“€μ΄ μ†Œμˆ˜μ΄λ‹€.
import math
import time


# κΈ°λ³Έ μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜ O(N)
def prime(x):
    for i in range(2, x):
        if x % i == 0:
            return False

    return True


# μ œκ³±κ·ΌκΉŒμ§€ O(N^(1/2))
def prime2(x):
    for i in range(2, int(math.sqrt(x))):
        if x % i == 0:
            return False

    return True


# μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 O(n log log n)
def eratos(x):
    prime_number = [1] * (x + 1)
    for i in range(2, x):
        if prime_number[i] == 0:
            continue

        for j in range(i * 2, x + 1, i):
            prime_number[j] = 0


# 1λΆ€ν„° 10000κΉŒμ§€
n = 10000
print('κΈ°λ³Έ')
start = time.time()
for k in range(2, n + 1):
    prime(k)
end = time.time()
print(f'μ‹œκ°„: {end - start}')

print('제곱근')
start = time.time()
for k in range(2, n + 1):
    prime2(k)
end = time.time()
print(f'μ‹œκ°„: {end - start}')

print('μ—λΌν† μŠ€')
start = time.time()
eratos(n)
end = time.time()
print(f'μ‹œκ°„: {end - start}')

'''
κΈ°λ³Έ
μ‹œκ°„: 0.3489978313446045
제곱근
μ‹œκ°„: 0.012001991271972656
μ—λΌν† μŠ€
μ‹œκ°„: 0.0019986629486083984
'''
λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'CS > Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μœ„μƒ μ •λ ¬(topology sort)  (0) 2020.10.05
ν”Œλ‘œμ΄λ“œ 와샬(Floyd Warshall)  (0) 2020.10.04
λ‹€μ΅μŠ€νŠΈλΌ(dijkstra)  (0) 2020.10.02
λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ°(Dynamic Programming)  (0) 2020.10.01
크루슀칼 μ•Œκ³ λ¦¬μ¦˜(kruskal)  (0) 2020.09.30
    'CS/Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • μœ„μƒ μ •λ ¬(topology sort)
    • ν”Œλ‘œμ΄λ“œ 와샬(Floyd Warshall)
    • λ‹€μ΅μŠ€νŠΈλΌ(dijkstra)
    • λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ°(Dynamic Programming)
    deo2kim
    deo2kim
    μ½”λ”© κΈ°λ‘ν•˜κΈ°

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”