😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[이것이 μ½”λ”© ν…ŒμŠ€νŠΈλ‹€ with Python]_38_μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/이것이 μ½”λ”© ν…ŒμŠ€νŠΈλ‹€ with python

[이것이 μ½”λ”© ν…ŒμŠ€νŠΈλ‹€ with Python]_38_μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

μ§•μ§•μ•ŒνŒŒμΉ΄ 2022. 2. 16. 00:14
728x90
λ°˜μ‘ν˜•

220216 μž‘μ„±

<λ³Έ λΈ”λ‘œκ·ΈλŠ” γ€Žμ΄κ²ƒμ΄ 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈλ‹€γ€ μ˜ youtubeλ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€>

https://www.youtube.com/watch?v=9rLFFKmKzno&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=38 

 

 

 

 

 

 

 

1. λ‹€μˆ˜μ˜ μ†Œμˆ˜ νŒλ³„

: νŠΉμ •ν•œ 수의 λ²”μœ„ μ•ˆμ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  μ†Œμˆ˜ 찾을 λ•ŒλŠ” μ–΄λ–»κ²Œ??

 

 

 

2. μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜

: λ‹€μˆ˜μ˜ μžμ—°μˆ˜μ— λŒ€ν•˜μ—¬ μ†Œμˆ˜ μ—¬λΆ€λ₯Ό νŒλ³„ν•  λ•Œ μ‚¬μš©

: N보닀 μž‘κ±°λ‚˜ 같은 λͺ¨λ“  μ†Œμˆ˜ 찾을 수 있음

 

1) 2λΆ€ν„° NκΉŒμ§€μ˜ λͺ¨λ“  μžμ—°μˆ˜ λ‚˜μ—΄

2) 남은 수 쀑 아직 μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ κ°€μž₯ μž‘μ€ 수 i μ°ΎκΈ°

3) 남은 수 쀑 i의 배수 λͺ¨λ‘ 제거 (i λŠ” 제거 X)

4) 더 이상 λ°˜λ³΅ν•  수 없을 λ•ŒκΉŒμ§€ 2번, 3번 κ³Όμ • 반볡

 

 

 

 

  • python
import math

n = 1000 # 2λΆ€ν„° 1,000κΉŒμ§€μ˜ λͺ¨λ“  μˆ˜μ— λŒ€ν•˜μ—¬ μ†Œμˆ˜ νŒλ³„
array = [True for i in range(n + 1)] # μ²˜μŒμ—” λͺ¨λ“  μˆ˜κ°€ μ†Œμˆ˜(True)인 κ²ƒμœΌλ‘œ μ΄ˆκΈ°ν™”

# μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜ 
for i in range(2, int(math.sqrt(n)) + 1): # 2λΆ€ν„° n의 μ œκ³±κ·ΌκΉŒμ§€μ˜ λͺ¨λ“  수λ₯Ό ν™•μΈν•˜λ©°
    if array[i] == True: # iκ°€ μ†Œμˆ˜μΈ 경우 (남은 수인 경우)
        # iλ₯Ό μ œμ™Έν•œ i의 λͺ¨λ“  배수λ₯Ό μ§€μš°κΈ°
        j = 2 
        while i * j <= n:
            array[i * j] = False
            j += 1

# λͺ¨λ“  μ†Œμˆ˜ 좜λ ₯
for i in range(2, n + 1):
    if array[i]:
        print(i, end=' ')

  • c++
#include <bits/stdc++.h>

using namespace std;

int n = 1000; // 2λΆ€ν„° 1,000κΉŒμ§€μ˜ λͺ¨λ“  μˆ˜μ— λŒ€ν•˜μ—¬ μ†Œμˆ˜ νŒλ³„
// μ²˜μŒμ—” λͺ¨λ“  μˆ˜κ°€ μ†Œμˆ˜(True)인 κ²ƒμœΌλ‘œ μ΄ˆκΈ°ν™”(0κ³Ό 1은 μ œμ™Έ)
vector<int> arr(n + 1, true);

int main() {
    // μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜ μˆ˜ν–‰
    // 2λΆ€ν„° n의 μ œκ³±κ·ΌκΉŒμ§€μ˜ λͺ¨λ“  수λ₯Ό ν™•μΈν•˜λ©°
    for (int i = 2; i <= (int) sqrt(n); i++) {
        // iκ°€ μ†Œμˆ˜μΈ 경우(남은 수인 경우)
        if (arr[i] == true) {
            // iλ₯Ό μ œμ™Έν•œ i의 λͺ¨λ“  배수λ₯Ό μ§€μš°κΈ°
            int j = 2;
            while (i * j <= n) {
                arr[i * j] = false;
                j += 1;
            }
        }
    }
    // λͺ¨λ“  μ†Œμˆ˜ 좜λ ₯
    for (int i = 2; i <= n; i++) {
        if (arr[i]) cout << i << ' ';
    }
}
  • java
import java.util.*;

class Main {
    // μ†Œμˆ˜ νŒλ³„ ν•¨μˆ˜(2μ΄μƒμ˜ μžμ—°μˆ˜μ— λŒ€ν•˜μ—¬)
    public static boolean isPrimeNumber(int x) {
        // 2λΆ€ν„° (X-1) κΉŒμ§€μ˜ λͺ¨λ“  수 ν™•μΈν•˜λ©°
        for (int i = 2; i < x ; i++) {
            // xκ°€ ν•΄λ‹Ή 수둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§„λ‹€λ©΄
            if (x % i == 0) {
                return false; // μ†Œμˆ˜κ°€ μ•„λ‹˜
            }
        }
        return true; // μ†Œμˆ˜μž„
    }

    public static void main(Strin

 

 

=> μ„ ν˜„ μ‹œκ°„μ— κ°€κΉŒμšΈ μ •λ„λ‘œ 맀우 λΉ λ₯΄λ‹€

=> μ‹œκ°„ λ³΅μž‘λ„λŠ” O(NloglogN)

=> 각 μžμ—°μˆ˜μ— λŒ€ν•œ μ†Œμˆ˜ μ—¬λΆ€ μ €μž₯ν•΄μ•Ό λΌμ„œ λ©”λͺ¨λ¦¬ 많이 ν•„μš”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•
Comments