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

[Rust로 백준 하루 하나] 9-4. 소수 찾기

sans2 2024. 9. 7. 13:43

문제 (1978번)

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

 

출력

주어진 수들 중 소수의 개수를 출력한다.


풀이

코드

use std::io;

fn main() {
    let mut n = String::new();
    io::stdin().read_line(&mut n).unwrap();

    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
    let input: Vec<&str> = input.split_whitespace().collect();

    let mut count = 0;
    for i in input {
        let x: i32 = i.trim().parse().unwrap();
        if is_prime(x) { count += 1 }
    }
    println!("{}", count);
}

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

해설

특이사항 없음


추가 학습

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

여기만 return false;가 아닌 false로 하면 반환이 안되는 오류가 나오던데 이유가 뭘까?