์์(Prime Number)์ ํฉ์ฑ์(Composite Number)
์์(Prime Number) ๋ 1๋ณด๋ค ํฌ๊ณ , ์๊ธฐ ์์ ๊ณผ 1์ ์ ์ธํ ์ฝ์๊ฐ ์๋ ์ ๋ฅผ ์๋ฏธํ๋ค.
ํฉ์ฑ์(Composite Number) ๋ 1๊ณผ ์๊ธฐ ์์ ์ด์ธ์๋ ๋ค๋ฅธ ์ฝ์๋ฅผ ๊ฐ์ง๋ ์ ๋ฅผ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด, 2, 3, 5, 7, 11, 13 ๋ฑ์ ์์์ด๋ฉฐ, 4, 6, 8, 9, 10 ๋ฑ์ ํฉ์ฑ์์ด๋ค.
1. O(โn) ์๊ฐ ๋ณต์ก๋์ ์ฝ์ ๊ฐ์ ๊ตฌํ๊ธฐ
n์ ์ฝ์๋ฅผ ์ฐพ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ 1๋ถํฐ n๊น์ง ๋ชจ๋ ์๋ฅผ ํ์ธํ๋ ๊ฒ ์ด๋ค. ํ์ง๋ง n์ ์ฝ์๋ ๋์นญ์ฑ์ ๊ฐ์ง๋ฏ๋ก, โn ๊น์ง๋ง ํ์ํด๋ ์ ์ฒด ์ฝ์๋ฅผ ๊ตฌํ ์ ์๋ค.
JavaScript ์ฝ๋:
function countDivisors(n) {
let count = 0;
let i = 1;
while (i * i < n) {
if (n % i === 0) {
count += 2; // i์ n/i ๋ ๊ฐ์ ์ฝ์ ์ถ๊ฐ
}
i++;
}
if (i * i === n) {
count += 1; // ์ ๊ณฑ์์ผ ๊ฒฝ์ฐ ์ค๋ณต ์ ๊ฑฐ
}
return count;
}
์๊ฐ ๋ณต์ก๋: O(โn)
2. O(โn) ์๊ฐ ๋ณต์ก๋์ ์์ ํ๋ณ
์์์ธ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ:
- 2๋ถํฐ n-1๊น์ง ๋ชจ๋ ์ซ์๋ก ๋๋์ด ๋ณด๋ฉด O(n) ์๊ฐ์ด ๊ฑธ๋ฆผ.
- โn๊น์ง๋ง ๊ฒ์ฌํ๋ฉด O(โn)์ผ๋ก ์ต์ ํ ๊ฐ๋ฅ
JavaScript ์ฝ๋:
function isPrime(n) {
if (n < 2) return false;
let i = 2;
while (i * i <= n) {
if (n % i === 0) return false;
i++;
}
return true;
}
์๊ฐ ๋ณต์ก๋: O(โn)
3. ๋์ ๋ค์ง๊ธฐ ๋ฌธ์ (Coin Flipping Problem)
n๊ฐ์ ๋์ ์ด ์ผ๋ ฌ๋ก ๋์ฌ ์๊ณ , ์ด๊ธฐ์๋ ๋ชจ๋ ์๋ฉด(Heads)์ด๋ค.
- i๋ฒ์งธ ์ฌ๋์ด ๋ฐฐ์ ์์น์ ๋์ ์ ๋ค์ง๋๋ค. (์: i = 3์ด๋ฉด 3, 6, 9, ...์ ๋ค์ง์)
- ์ต์ข ์ ์ผ๋ก ๋ท๋ฉด(Tails)์ด ๋ณด์ด๋ ๋์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ .
O(n log n) ํด๊ฒฐ๋ฒ (์๋ฎฌ๋ ์ด์ )
function countTails(n) {
let result = 0;
let coin = new Array(n + 1).fill(0);
for (let i = 1; i <= n; i++) {
let k = i;
while (k <= n) {
coin[k] = (coin[k] + 1) % 2;
k += i;
}
result += coin[i];
}
return result;
}
์๊ฐ ๋ณต์ก๋: O(n log n)
O(โn) ํด๊ฒฐ๋ฒ (์ํ์ ์ต์ ํ)
๋ค์งํ ํ์๊ฐ ํ์์ธ ๋์ ๋ง ๋ท๋ฉด์ ๋ณด์ด๊ฒ ๋๋ค. ์ด๋ ์ฝ์์ ๊ฐ์๊ฐ ํ์์ธ ๊ฒฝ์ฐ์ธ๋ฐ, ์ ๊ณฑ์๋ง ํ์ ๊ฐ์ ์ฝ์๋ฅผ ๊ฐ์ง๋ค. ์ฆ, 1, 4, 9, 16, ...์ ๊ฐ์๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค.
function countTailsOptimized(n) {
return Math.floor(Math.sqrt(n));
}
์๊ฐ ๋ณต์ก๋: O(1) (์ ๊ณฑ๊ทผ ๊ณ์ฐ)
๋๊ธ