
소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는kotlin을 기반으로 작성합니다.
이번 주 주제는 소수 판별 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
소수 판별 알고리즘
해당 내용은 위 포스트에 작성하였습니다.
https://www.acmicpc.net/problem/4948
이 문제는 숫자가 0이 아닐 때 계속
n부터 2 * n 범위 내 소수의 갯수를 구하는 문제입니다.
- 일단 숫자를 받을 nextInt 함수를 만들어 주고
- 소수를 판별할 수 있는 primeNum 함수를 만든 뒤
- 0이 아닐 때 까지 숫자를 받으르 수 있는 반복을 만들고
- 반복문을 사용해서 num+1부터 num*2의 범위 내에 primeNum에 x를 넣어
true면 이 값은 소수기에 +1을 해주어 범위네 소수의 갯수를 더해주었습니다.
import java.io.StreamTokenizer
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())) {
fun nextInt() : Int {
nextToken()
return nval.toInt()
}
fun primeNum(n: Int): Boolean {
for (x in 2..Math.sqrt(n.toDouble()).toInt()) {
if (n % x == 0) {
return false
}
}
return true
}
while(true){
val num = nextInt()
var result = 0
if (num == 0) {
break
}
for(x in num+1..num*2){
if(primeNum(x)){
result += 1
}
}
println(result)
}
}

찾아보면 더 빠른 속도로 구할 수 있을 거 같은데
아직 실력이 안되니.. 활용방법에 대해 연구를 해야겠습니다.