エラトステネスの篩の活用法を総特集! 〜 高速素因数分解・メビウスの反転公式 〜 #AtCoder - Qiita

エラトステネスの篩のコード

    pub fn sieve_of_eratosthenes(n: usize) -> Vec<bool> {
        let mut is_prime = vec![true; n + 1];
        is_prime[0] = false;
        is_prime[1] = false;
        for p in 2..=n.sqrt() {
            if !is_prime[p] {
                continue;
            }
            for q in (p * 2..=n).step_by(p) {// n/p 回ループ
                is_prime[q] = false;
            }
        }
        is_prime
    }

min_factor, num_factor

$63 = 3 \times 3 \times 7$ の最小素因数は $3$、素因数の数は $2$

DP で bool 値 DP、数え上げDP、最小化 DP があるようにエラトステネスの篩 (bool) の最小化バージョンや最小化バージョンもある。

高速素因数分解・高速約数列挙

メビウス関数