ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ž€?

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ *์†Œ์ˆ˜(Prime Number) ํŒ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ์†Œ์ˆ˜๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

*์†Œ์ˆ˜ : ์–‘์˜ ์•ฝ์ˆ˜๋ฅผ ๋‘๊ฐœ(1๊ณผ ์ž์‹ )๋งŒ ๊ฐ€์ง€๋Š” ์ž์—ฐ์ˆ˜

 

์ผ๋ฐ˜์ ์œผ๋กœ ํšจ์œจ์ ์ธ ์†Œ์ˆ˜ ํŒ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜

const arr = [];

for(let i=2;i<=10;i++) {
    let find = true;
    for(let j=2;j<=Math.sqrt(i);j++) {
        if(i%j == 0) {
            find = false;
            break;
        }
    }
    if(find) {
        arr.push(i);
    }
}

console.log(arr); // [2, 3, 5, 7]

 

๊ฐ€์žฅ ์ƒ๊ฐํ•˜๊ธฐ ์‰ฌ์šด N์˜ ์†Œ์ˆ˜ ํŒ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ 2 ~ N-1๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘์—์„œ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๊ฐ€ ์—†์„๋•Œ ์†Œ์ˆ˜๋ผ๊ณ  ํŒ๋ณ„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, N์˜ ์•ฝ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด √N๋ฒ”์œ„ ์•ˆ์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— √N๊นŒ์ง€ ํ™•์ธํ–ˆ์„ ๋•Œ O(√N)์œผ๋กœ ์กฐ๊ธˆ ํšจ์œจ์ ์œผ๋กœ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1๊ฐœ์˜ ์ˆซ์ž์— ๋Œ€ํ•ด ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

์—๋ผํ† ์Šคํ…Œ์ฒด๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜

์†Œ์ˆ˜๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—๋ผํ† ์Šคํ…Œ์ฒด๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

 

const arr = [];
const check = Array(10+1).fill(true);
let m = Math.floor(Math.sqrt(10));

//i = 2 ๋ถ€ํ„ฐ i์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ true๋กœ ์ง€์›๋‹ˆ๋‹ค.
//์ด๋•Œ, ์ด๋ฏธ ์ง€์›Œ์ง„ ์ˆซ์ž๋Š” continueํ•ฉ๋‹ˆ๋‹ค.
for(let i = 2; i <= m; i++){
    if(check[i]){
        arr.push(i);
        let temp = i+i;
        while(temp < check.length){
            check[temp] = false;
            temp += i;
        }
    }
}
for(let i = m+1; i < check.length; i++){
    if(check[i]) arr.push(i);
}

console.log(arr); // [2, 3, 5, 7]

 

์—๋ผํ† ์Šคํ…Œ์ฒด๋„ค์Šค์˜ ์ฒด๋Š” ๊ฐ€์žฅ ๋จผ์ € ์†Œ์ˆ˜๋ฅผ ๋ฐ˜๋ณ„ํ•  ๋ฒ”์œ„๋งŒํผ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜๊ณ  ๊ทธ ์ธ๋ฑ์Šค์— true๊ฐ’์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ, 2 ~ √N ๊นŒ์ง€ ์ž์‹ ์„ ์ œ์™ธํ•œ ๊ฐ ์ˆซ์ž์˜ ๋ฐฐ์ˆ˜๋“ค์˜ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด๊ฐ’์„ false๋กœ ์ œ์™ธ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด๋•Œ, ๊ฐ ์ˆซ์ž์˜ ๋ฐฐ์ˆ˜๋“ค์„ ์ œ์™ธ์‹œํ‚ค ์ „์— ์ด๋ฏธ false๊ฐ’์ด๋ผ๋ฉด ํ•ด๋‹น ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋“ค์€ ์ด๋ฏธ ์ œ๊ฑฐ๋์œผ๋ฏ€๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, N์ด 10์ธ ๊ฒฝ์šฐ Math.sqrt(10) = 3.1622776601683795 ์ด๋ฏ€๋กœ 2, 3, 4์˜ ๋ฐฐ์ˆ˜๋“ค์„ ์ œ์™ธ์‹œํ‚ต๋‹ˆ๋‹ค.

 

1) 2์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ œ๊ฑฐ 

 

true (i=2) true false true false true false true false (i=10)

 

2) 3์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ œ๊ฑฐ

 

true true false true false true false false false

 

 

๋”ฐ๋ผ์„œ, ๋ฐฐ์—ด์—์„œ true์ธ index๋“ค๋งŒ ๋ฝ‘์•„๋‚ธ๋‹ค๋ฉด 2, 3, 5, 7 ์ด ๋˜๊ณ  ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^(1/2))๋กœ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

[์ฐธ๊ณ ]

https://blog.naver.com/PostView.naver?blogId=ndb796&logNo=221233595886&redirect=Dlog&widgetTypeCall=true&directAccess=false 

 

22. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์†Œ์ˆ˜(Prime Number) ํŒ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์†Œ์ˆ˜๋ž€ '์–‘์˜ ์•ฝ์ˆ˜๋ฅผ ๋‘...

blog.naver.com

'CS > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์•Œ๊ณ ๋ฆฌ์ฆ˜] DP(Dynamic Programming)๋ž€?  (0) 2022.10.25
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ(Sorting Algorithm)์ด๋ž€?  (1) 2022.09.25