경험의 기록

문제

https://www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

 

풀이

0. 문제 해석

2021.03.21 - [알고리즘, 자료구조/기본] - [알고리즘] 소수 구하기 알고리즘 (에라토스테네스의 체)

 

[알고리즘] 소수 구하기 알고리즘 (에라토스테네스의 체)

소수는 약수로 1과 자기자신만을 가지는 수이다. 즉, 소수의 배수들은 전부 소수를 약수로 가지기 때문에, 소수가 아니다. 그러므로, 소수를 찾고 싶다면 범위내의 소수의 배수들을 전부 제거하

hanyeop.tistory.com

에라토스테네스의 체 알고리즘을 이용한다.

 

1. 전체 코드

// [백준] 2581. 소수 (Kotlin)
import java.io.BufferedReader
import java.io.InputStreamReader

fun main() = with(BufferedReader(InputStreamReader(System.`in`))){

    val m = readLine().toInt()
    val n = readLine().toInt()
    var min = 0
    var sum = 0

    // true => 소수
    val arr = Array(n + 1) {true}

    // 0과 1은 소수 X
    arr[0] = false
    arr[1] = false

    // 소수의 배수는 전부 소수가 아님
    for(i in 2 .. n){
        if(arr[i]){
            for(j in (2 * i) .. n step i){
                arr[j] = false
            }
        }
    }

    // 범위 내의 소수 합
    for(i in m .. n){
        if(arr[i]){
            if(min == 0){
                min = i
            }
            sum += i
        }
    }

    // 소수가 없을 때
    if(min == 0){
        println(-1)
    }
    else {
        println(sum)
        println(min)
    }
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading