백준 1929 - 소수 구하기 [Rust]

[Silver III] 소수 구하기 - 1929

Posted by Hebi on April 5, 2023

백준 알고리즘

[Silver III] 소수 구하기 - 1929

문제 링크

성능 요약

메모리: 13668 KB, 시간: 188 ms

분류

수학(math), 정수론(number_theory), 소수 판정(primality_test), 에라토스테네스의 체(sieve)

문제 설명

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력

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

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::fmt::Write;
use std::io;
fn find_prime_num(n: i32) -> i32 {
    let mut i = 2;

    if n < 2 {
        return 0;
    } else {
        while i <= (n / i) {
            if n % i == 0 {
                return 0;
            }
            i = i + 1;
        }
        return 1;
    }
}
fn main() {
    let mut input_a = String::new();
    io::stdin().read_line(&mut input_a).unwrap();

    let v: Vec<i32> = input_a
        .split_whitespace()
        .map(|x| -> i32 { x.parse().unwrap() })
        .collect();

    let mut a = v[0].clone();
    let b = v[1].clone();
    let mut output = String::new();
    while a <= b {
        if find_prime_num(a) == 1 {
            writeln!(output, "{}", a).unwrap();
        }
        a = a + 1;
    }
    print!("{}", output);
}