์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค!
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ค ๋ณด๋ฉด ์์๋ฅผ ์ฐพ์ํ ํ๋ ์ ํ์ด ๋ง์๋ฐ์.
์์์ ๊ฐฏ์๋ฅผ ์ฐพ์์ผ ํ ๋, ์์์ธ์ง ์๋์ง ๋ถ๋ณํด์ผ ํ ๋ ๋ฑ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํฉ๋๋ค.
์ค๋์ ์ ํํ ์๊ณ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด์ ๊ธ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~!
๊ธฐ์กด์ ์์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
๊ธฐ์กด์ ์์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ k๋ผ๋ ์๊ฐ ์๋ค๋ฉด ๋จ์ํ๊ฒ 2๋ถํฐ n๊น์ง k๋ก ๋๋ ์ ๋๋์ด ๋จ์ด์ง๋ ์ซ์์ ๊ฐฏ์๋ฅผ ํ๋ณํ๋ฉด ๋๊ฒ ์ฃ ?
ํ์ง๋ง ์ด๋ฐ ๋ฐฉ๋ฒ์ ์ซ์๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ๋นํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋๋ฐ์.
์๋ผํ ์ค ํ ๋ค์ค์ ์ฒด
๋จผ์ 2๋ถํฐ n๊น์ง์ ๊ตฌ๊ฐ์์ ์์์ ๊ฐฏ์๋, ์ด๋ค ์์๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด์ "์๋ผํ ์ค ํ ๋ค์ค์ ์ฒด"๋ฅผ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ฉด ๋ฉ๋๋ค.
์ฐพ๋ ๋ฐฉ์์ ์๋์ ๊ฐ์ต๋๋ค.
1. 2๋ถํฐ n๊น์ง ๋ชจ๋ ์๋ฅผ ๋์ดํ๋ค.
2. ๋ง์ฝ ์์๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด ์์๋ฅผ ๋ฐ๋ก ์ ํ๊ณ ์์์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค.
3. ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๊ตฌ๊ฐ์ ๋ชจ๋ ์์๊ฐ ๋จ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ดํดํ๊ธฐ ํจ์ฌ ํธํ์ค ๊ฑฐ์์!
์ฝ๋ ๊ตฌํ
func countPrimeNumber(_ n: Int) -> Int {
var count = 0
var array = Array.init(repeating: false, count: n+1)
for i in 2...n {
if array[i] == false {
count += 1
for j in stride(from: i, through: n, by: i) {
array[j] = true
}
}
}
return count
}
์์๋ถ๋ณ๋ฒ
๊ทธ ๋ค์์ผ๋ก ์์์ธ์ง ์๋์ง ๋น ๋ฅด๊ฒ ํ์ธํด์ผ ํ ๋๊น ์์ต๋๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์๋ "์ ๊ณฑ๊ทผ"์ ์ด์ฉํ๋ฉด ๋๋๋ฐ์.
n์ ์ฝ์๋ ๋ฌด์กฐ๊ฑด n์ ์ ๊ณฑ๊ทผ ์์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ 2๋ถํฐ sqrt(n)์ ๋ฒ์์์ ์๊ธฐ ์์ ์ผ๋ก ๋๋์ด ๋จ์ด์ง๋์ง ์๋์ง๋ฅผ ํ์ธํ๋ฉด ๋ฉ๋๋ค.
์ฃผ์ํ ์ ์ ์ ๊ณฑ๊ทผ์ด 2๋ณด๋ค ํฌ๋ค๋ฉด ์ ๊ณฑ๊ทผ์ ์ด์ฉํ๊ณ ์๋๋ผ๋ฉด 2๋ถํฐ n๊น์ง ํ์ํด์ผ ํฉ๋๋ค.
์ฝ๋ ๊ตฌํ
func isPrimeNumber(_ n:Int) -> Bool {
let sqrt = Int(sqrt(Double(n))) >= 2 ? Int(sqrt(Double(n))) : n
for i in 2..<sqrt {
if n%i == 0 {
return false
}
}
return true
}
๋๊ธ