λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Lect & Tip/javascript, jQuery

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 JS μ†Œμˆ˜ μ°ΎκΈ° μ•Œκ³ λ¦¬μ¦˜ λ§Œλ“€κΈ°

by 낯선곡간2019 2023. 11. 10.

λͺ©μ°¨

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체: μˆ˜ν•™κ³Ό 컴퓨터 κ³Όν•™μ—μ„œμ˜ μ€‘μš”μ„±

    μˆ˜ν•™κ³Ό κ³ λŒ€ μ—­μ‚¬μ—μ„œμ˜ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” κ³ λŒ€ 그리슀 μˆ˜ν•™μž μ—λΌν† μŠ€ν…Œλ„€μŠ€κ°€ λ°œκ²¬ν•œ μ†Œμˆ˜λ₯Ό μ°ΎλŠ” λ°©λ²•μœΌλ‘œ, κ°„λ‹¨ν•˜λ©΄μ„œλ„ 효율적인 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ•Œλ €μ Έ μžˆμŠ΅λ‹ˆλ‹€. 이 방법은 정해진 λ²”μœ„ μ•ˆμ˜ λͺ¨λ“  μ†Œμˆ˜λ₯Ό μ°ΎκΈ° μœ„ν•΄, 2λΆ€ν„° μ‹œμž‘ν•˜μ—¬ κ·Έ 배수λ₯Ό μ§€μ›Œλ‚˜κ°€λŠ” 과정을 λ°˜λ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 2의 배수λ₯Ό λͺ¨λ‘ μ§€μš°κ³ , λ‹€μŒμœΌλ‘œ 남은 κ°€μž₯ μž‘μ€ 수인 3의 배수λ₯Ό μ§€μ›λ‹ˆλ‹€. μ΄λŸ¬ν•œ 과정을 λ°˜λ³΅ν•˜λ©΄ κ²°κ΅­ λ‚¨λŠ” μˆ˜λ“€μ΄ λ°”λ‘œ μ†Œμˆ˜κ°€ λ©λ‹ˆλ‹€.

    이 μ•Œκ³ λ¦¬μ¦˜μ€ λ‹¨μˆœν•¨μ—λ„ λΆˆκ΅¬ν•˜κ³  맀우 μ€‘μš”ν•œ 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€. μ†Œμˆ˜λŠ” μˆ˜ν•™μ˜ λ‹€μ–‘ν•œ λΆ„μ•ΌλΏλ§Œ μ•„λ‹ˆλΌ μ•”ν˜Έν•™μ—μ„œλ„ 맀우 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. λ”°λΌμ„œ, 효율적으둜 μ†Œμˆ˜λ₯Ό μ°ΎλŠ” 방법은 κ³ λŒ€λΆ€ν„° ν˜„λŒ€μ— 이λ₯΄κΈ°κΉŒμ§€ μ—¬λŸ¬ λΆ„μ•Όμ—μ„œ μ‘μš©λ©λ‹ˆλ‹€.

    컴퓨터 κ³Όν•™μ—μ„œμ˜ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체의 μ‘μš©

    컴퓨터 κ³Όν•™μ—μ„œ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ 기초적인 μ˜ˆμ‹œλ‘œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€. 특히, ν”„λ‘œκ·Έλž˜λ°μ„ λ°°μš°λŠ” ν•™μƒλ“€μ—κ²Œ 반볡문과 쑰건문의 μ‚¬μš©μ„ κ°€λ₯΄μΉ˜λŠ”데 μœ μš©ν•˜κ²Œ μ“°μž…λ‹ˆλ‹€. λ˜ν•œ, 이 μ•Œκ³ λ¦¬μ¦˜μ€ 컴퓨터가 νŠΉμ • λ²”μœ„ λ‚΄μ˜ μ†Œμˆ˜λ₯Ό λΉ λ₯΄κ³  효율적으둜 μ°ΎλŠ” 데에도 μ“°μž…λ‹ˆλ‹€.

    μ•”ν˜Έν•™μ—μ„œλŠ” λŒ€κ·œλͺ¨ μ†Œμˆ˜λ₯Ό μ°ΎλŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. μ΄λŠ” 곡개 ν‚€ μ•”ν˜Έν™”, 디지털 μ„œλͺ… λ“±μ—μ„œ ν•„μˆ˜μ μΈ μš”μ†Œμž…λ‹ˆλ‹€. μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” μ΄λŸ¬ν•œ 큰 μ†Œμˆ˜λ₯Ό μ°ΎλŠ” 초기 λ‹¨κ³„μ—μ„œ ν™œμš©λ  수 있으며, 컴퓨터 μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ λ†’μ΄λŠ” 데 κΈ°μ—¬ν•©λ‹ˆλ‹€.

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체의 ν•œκ³„μ™€ ν˜„λŒ€μ  μ‘μš©

    비둝 μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체가 효율적인 방법 쀑 ν•˜λ‚˜μ§€λ§Œ, 맀우 큰 μˆ˜μ— λŒ€ν•΄μ„œλŠ” μ‹œκ°„κ³Ό λ©”λͺ¨λ¦¬ λ©΄μ—μ„œ ν•œκ³„λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ ν˜„λŒ€μ˜ 컴퓨터 κ³Όν•™μžλ“€μ€ μ—¬λŸ¬ 가지 μ΅œμ ν™” 기법을 λ„μž…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ 쀄이기 μœ„ν•΄ λΉ„νŠΈλ§΅μ„ μ‚¬μš©ν•˜κ±°λ‚˜, 병렬 처리λ₯Ό 톡해 계산 속도λ₯Ό λ†’μ΄λŠ” 방법 등이 μžˆμŠ΅λ‹ˆλ‹€.

    μ΄λŸ¬ν•œ μ΅œμ ν™”λ₯Ό 톡해 μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” λŒ€μš©λŸ‰ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” λΉ… 데이터 λΆ„μ„μ΄λ‚˜, λ³΅μž‘ν•œ μ•”ν˜Έ μ•Œκ³ λ¦¬μ¦˜μ—μ„œλ„ μ—¬μ „νžˆ μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€. λ”°λΌμ„œ, 이 κ³ λŒ€μ˜ μ•Œκ³ λ¦¬μ¦˜μ΄ ν˜„λŒ€ 기술과 κ²°ν•©ν•˜μ—¬ μƒˆλ‘œμš΄ κ°€μΉ˜λ₯Ό μ°½μΆœν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” κ³ λŒ€ 그리슀 μ‹œλŒ€μ— 발견된 κ°„λ‹¨ν•˜λ©΄μ„œλ„ 효율적인 μ†Œμˆ˜ μ°ΎκΈ° μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 이 방법은 μˆ˜ν•™κ³Ό 컴퓨터 κ³Όν•™, 특히 μ•”ν˜Έν•™μ—μ„œ μ€‘μš”ν•œ 역할을 ν•˜λ©°, μ˜€λŠ˜λ‚ μ—λ„ μ—¬μ „νžˆ κ΄‘λ²”μœ„ν•˜κ²Œ μ‘μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν˜„λŒ€ 기술의 λ°œμ „κ³Ό ν•¨κ»˜ μ΅œμ ν™”λ˜μ–΄ κ°€λ©΄μ„œ, 이 κ³ λŒ€μ˜ μ§€ν˜œλŠ” λ”μš± λ°œμ „λœ ν˜•νƒœλ‘œ 우리 μ‚Ά 속에 μŠ€λ©°λ“€κ³  μžˆμŠ΅λ‹ˆλ‹€.

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό ν™œμš©ν•œ JS μ†Œμˆ˜ μ°ΎκΈ° 둜직 κ΅¬ν˜„ν•˜κΈ°

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” μˆ˜ν•™μ  μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜λ‘œ, νŠΉμ • λ²”μœ„ λ‚΄μ—μ„œ λͺ¨λ“  μ†Œμˆ˜λ₯Ό μ°ΎλŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 이 μ•Œκ³ λ¦¬μ¦˜μ€ κ³ λŒ€ 그리슀 μˆ˜ν•™μž μ—λΌν† μŠ€ν…Œλ„€μŠ€κ°€ λ§Œλ“€μ—ˆμœΌλ©°, 효율적인 μ†Œμˆ˜ μ°ΎκΈ° λ°©λ²•μœΌλ‘œ 널리 μ•Œλ €μ Έ μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜λŠ” 방법을 μ†Œκ°œν•˜κ² μŠ΅λ‹ˆλ‹€.

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

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒκ³Ό 같은 λ‹¨κ³„λ‘œ μ†Œμˆ˜λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€:

    1. λͺ¨λ“  숫자λ₯Ό μ†Œμˆ˜λ‘œ κ°€μ •ν•©λ‹ˆλ‹€.
    2. 2λΆ€ν„° μ‹œμž‘ν•˜μ—¬, νŠΉμ • 숫자의 λ°°μˆ˜λ“€μ„ λͺ¨λ‘ μ†Œμˆ˜κ°€ μ•„λ‹Œ κ²ƒμœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
    3. λ‹€μŒ μ†Œμˆ˜λ₯Ό μ°Ύμ•„ κ·Έ λ°°μˆ˜λ“€μ„ μ œκ±°ν•©λ‹ˆλ‹€.
    4. 이 과정을 λ°˜λ³΅ν•˜μ—¬ μ†Œμˆ˜λ§Œ λ‚¨κΉλ‹ˆλ‹€.

    μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 κ΅¬ν˜„ν•˜κΈ°

    μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜λŠ” 것은 비ꡐ적 κ°„λ‹¨ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” 기본적인 κ΅¬ν˜„ λ°©λ²•μž…λ‹ˆλ‹€:

    function findPrimes(n) {
        let array = [], upperLimit = Math.sqrt(n), output = [];
    
        // 배열을 μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€
        for (let i = 0; i < n; i++) {
            array.push(true);
        }
    
        // μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜ 적용
        for (let i = 2; i <= upperLimit; i++) {
            if (array[i]) {
                for (let j = i * i; j < n; j += i) {
                    array[j] = false;
                }
            }
        }
    
        // μ†Œμˆ˜λ₯Ό 배열에 μΆ”κ°€
        for (let i = 2; i < n; i++) {
            if(array[i]) {
                output.push(i);
            }
        }
    
        return output;
    }
    
    // μ˜ˆμ‹œ: 30κΉŒμ§€μ˜ μ†Œμˆ˜ μ°ΎκΈ°
    console.log(findPrimes(30));

    μ•Œκ³ λ¦¬μ¦˜ μ΅œμ ν™”

    이 κΈ°λ³Έ μ•Œκ³ λ¦¬μ¦˜μ€ μž‘μ€ μˆ«μžμ— λŒ€ν•΄μ„œλŠ” 잘 μž‘λ™ν•˜μ§€λ§Œ, 맀우 큰 숫자 λ²”μœ„μ— λŒ€ν•΄μ„œλŠ” λΉ„νš¨μœ¨μ μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 μ΅œμ ν™”λ₯Ό κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

    • λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄이기 μœ„ν•΄ λΉ„νŠΈ 연산을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ©€ν‹° μŠ€λ ˆλ”©μ΄λ‚˜ μ›Ή μ›Œμ»€λ₯Ό μ‚¬μš©ν•˜μ—¬ 계산을 병렬 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ°°μ—΄ λŒ€μ‹  λ‹€λ₯Έ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ ‘κ·Ό μ‹œκ°„μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” μ†Œμˆ˜λ₯Ό μ°ΎλŠ” κ°•λ ₯ν•˜κ³  효율적인 λ°©λ²•μž…λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄μš©ν•œ κ΅¬ν˜„μ€ κ°„λ‹¨ν•˜λ©°, ν•„μš”μ— 따라 λ‹€μ–‘ν•œ μ΅œμ ν™”λ₯Ό μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ•Œκ³ λ¦¬μ¦˜μ„ ν™œμš©ν•˜μ—¬ λ‹€μ–‘ν•œ μˆ˜ν•™μ  문제 해결에 λ„μ „ν•΄λ³΄μ„Έμš”.

    ν‚€μ›Œλ“œ

    • μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체, μžλ°”μŠ€ν¬λ¦½νŠΈ, μ†Œμˆ˜ μ°ΎκΈ°, μ•Œκ³ λ¦¬μ¦˜, μ΅œμ ν™”, λ©”λͺ¨λ¦¬ μ‚¬μš©, 병렬 처리, 자료ꡬ쑰, μˆ˜ν•™μ  문제 ν•΄κ²°, ν”„λ‘œκ·Έλž˜λ°.

    ν‚€μ›Œλ“œ

    • μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체, μ†Œμˆ˜ μ°ΎκΈ°, μ•Œκ³ λ¦¬μ¦˜, μˆ˜ν•™, 컴퓨터 κ³Όν•™, μ•”ν˜Έν•™, ν”„λ‘œκ·Έλž˜λ° ꡐ윑, μ΅œμ ν™” 기법, λΉ… 데이터, κ³ λŒ€ 그리슀
    λ°˜μ‘ν˜•

    λŒ“κΈ€