[알고리즘] 백준 1929번 : 소수 구하기 (Koltin)

    www.acmicpc.net/problem/1929

     

    1929번: 소수 구하기

    첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

    www.acmicpc.net

     

    1. Scanner + sqrt

      
      fun main() = with(Scanner(System.`in`)) {
    
          val N = nextInt()
          val M = nextLine().trim().toInt()
          val check = BooleanArray(M + 1)
    
          for (i in check.indices) check[i] = true
    
          val sqrt = sqrt(M.toDouble()).toInt()
          for (i in 2..sqrt) {
              if (check[i]) {
                  var j = i
                  while (j * i <= M) {
                      check[i * j] = false
                      j++
                  }
              }
          }
          for (i in N..M) {
              if (i == 1) continue
              if (check[i]) println(i)
          }
      }
      

     

    2. BufferedReader + StringBuilder + split

      
      fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
          val sb = StringBuilder()
          val NM = readLine().split(" ")
          val N = NM[0].toInt()
          val M = NM[1].toInt()
    
          val prime = BooleanArray(M + 1)
    
          for (i in 2..M) {
              if (prime[i]) continue
              if (i >= N) sb.append(i).append("\n")
    
              var j = i + i
              while (j <= M) {
                  prime[j] = true
                  j += i
              }
          }
          println(sb)
      }
      

     

    3. BufferedReader + StringBuilder + StringTokenizer

      
      fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
          val sb = StringBuilder()
          val st = StringTokenizer(readLine(), " ")
          val N = st.nextToken().toInt()
          val M = st.nextToken().toInt()
    
          val prime = BooleanArray(M + 1)
    
          for (i in 2..M) {
              if (prime[i]) continue
              if (i >= N) sb.append(i).append('\n')
    
              var j = i + i
              while (j <= M) {
                  prime[j] = true
                  j += i
              }
          }
          println(sb)
      }
      

     

    댓글