본문 바로가기

컴퓨터 과학/자료구조, 알고리즘

[Rust로 백준 하루 하나] 9-5. 소수

문제 (2581번)

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

 

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

 

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

 

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

 

출력

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

 

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.


풀이

코드

use std::io;

fn main() {
    let mut m = String::new();
    io::stdin().read_line(&mut m).unwrap();
    let m: i32 = m.trim().parse().unwrap();

    let mut n = String::new();
    io::stdin().read_line(&mut n).unwrap();
    let n: i32 = n.trim().parse().unwrap();

    let mut prime: Vec<i32> = Vec::new();
    for x in m..=n {
        if is_prime(x) {
            prime.push(x);
        } else {
            continue
        }
    }

    if prime.len() == 0 {
        println!("{}", -1);
    } else {
        let sum: i32 = prime.iter().sum();
        println!("{}", sum);
        println!("{}", prime[0]);
    }
}

fn is_prime(num: i32) -> bool {
    if num <= 1 {
        false
    } else {
        for n in 2..=num/2 {
            if num % n == 0 { return false; }
        }
        true
    }
}

해설

특이사항 없음


추가 학습

특이사항 없음