λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🧩 Algorithm/κ΅¬ν˜„

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

by HelloRabbit 2023. 2. 13.
728x90

Goal

1. μ†Œμˆ˜ μ •μ˜ν•˜κΈ°
2. μ†Œμˆ˜ μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜ - "μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체" μ΄ν•΄ν•˜κΈ°

 

μ†Œμˆ˜λž€?

μ†Œμˆ˜λž€ 숫자 쀑 λ‚˜ μžμ‹ κ³Ό 1둜만 λ‚˜λˆ μ§€λŠ” μˆ˜λ‹€. 즉, κ·Έ 2개의 수 μ΄μ™Έμ˜ λ‹€λ₯Έ 수둜 λ‚˜λˆ μ§„λ‹€λ©΄ μ†Œμˆ˜κ°€ μ•„λ‹Œ "ν•©μ„±μˆ˜" 라고 말할 수 μžˆλ‹€!

μ˜ˆμ‹œ)

μ†Œμˆ˜ : 2, 3, 5, 7, 11, 13, 17, 19, ...

κ·Έ μ™Έ : 4 (2둜 λ‚˜λˆ μ§€λ‹ˆκΉŒ), 6 (2와 3으둜 λ‚˜λˆ μ§€λ‹ˆκΉŒ), 8 (2둜 λ‚˜λˆ μ§€λ‹ˆκΉŒ), 9 (3으둜 λ‚˜λˆ μ§€λ‹ˆκΉŒ), ...

 

 

"μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체"λŠ” μ–Έμ œ ν•„μš”ν•œκ°€?

  • Nμ΄λΌλŠ” μˆ«μžκ°€ μ†Œμˆ˜μΈμ§€ μ•„λ‹Œμ§€ νŒλ‹¨ν•˜κΈ° μœ„ν•΄μ„œλŠ” 2λΆ€ν„° N/2 κΉŒμ§€μ˜ 숫자둜 λ‚˜λˆ λ΄μ•Ό μ•Œ 수 μžˆλ‹€
  • ν•˜μ§€λ§Œ 2λΆ€ν„° 100κΉŒμ§€μ˜ 숫자 μ€‘μ—μ„œ μ†Œμˆ˜λ₯Ό 좜λ ₯ν•˜λΌκ³  ν•œλ‹€λ©΄ 이쀑 for문을 λŒλ €μ•Όν•˜κ³  μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n^2)으둜 λŠλ¦¬λ‹€
# μ†Œμˆ˜ μ°ΎλŠ” ν•¨μˆ˜
def get_prime(start, end):
    prime_numbers = []

    for target_num in range(start, end):
        prime_numbers.append(target_num)

        for k in range(2, target_num//2):
            if target_num % k == 0:	
                prime_numbers.pop()	# 숫자 target_numκ°€ k둜 λ‚˜λˆ μ§„λ‹€λ©΄ μ†Œμˆ˜κ°€ μ•„λ‹ˆλ―€λ‘œ 제거
                break

    return prime_numbers

# 2μ—μ„œ 100κΉŒμ§€μ˜ 숫자 쀑 μ†Œμˆ˜ μ°ΎκΈ°
print(get_prime(2, 101))

 

  • κ·Έλž˜μ„œ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό ν™œμš©ν•˜λ©΄ μ’‹λ‹€!!

"μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체"λž€?

  • μ†Œμˆ˜λ₯Ό 발견 ν–ˆμ„ λ•Œ κ·Έ μ†Œμˆ˜μ˜ 배수λ₯Ό λͺ¨λ‘ μ œμ™Έμ‹œν‚¨λ‹€

https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

  1. μœ„ κ·Έλ¦Όμ—μ„œ 2κ°€ μ†Œμˆ˜λΌλŠ”κ±Έ λ°œκ²¬ν•˜κ³  λ‚˜λ¨Έμ§€ 2의 λ°°μˆ˜λ“€μ€ 2둜 λ‚˜λˆ μ§€κΈ° λ•Œλ¬Έμ— μ†Œμˆ˜κ°€ μ•„λ‹Œ 것을 μ•Œ 수 μžˆμ–΄ μ œμ™Έμ‹œν‚¨λ‹€
  2. κ·Έ λ‹€μŒ 3이 μ†Œμˆ˜λΌλŠ”κ±Έ λ°œκ²¬ν•˜κ³  λ‚˜λ¨Έμ§€ 3의 λ°°μˆ˜λ“€μ€ 3으둜 λ‚˜λˆ μ§€κΈ° λ•Œλ¬Έμ— μ†Œμˆ˜κ°€ μ•„λ‹ˆλ―€λ‘œ μ œμ™Έμ‹œν‚¨λ‹€
  3. κ·Έ λ‹€μŒ 5κ°€ μ†Œμˆ˜λΌλŠ”κ±Έ λ°œκ²¬ν•˜κ³  5의 배수λ₯Ό μ œμ™Έμ‹œν‚¨λ‹€
  4. κ·Έ λ‹€μŒ 7이 μ†Œμˆ˜...
  5. 계속 반볡...

 

 

 

λŒ“κΈ€