λ°μν
π μλΌν μ€ν λ€μ€μ 체(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 |