「模板」数论

素数筛

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
auto sieve(auto n, auto&& pri, auto&& np) {
    np.resize(n + 1);
    for (auto i = 2; i <= n; i ++) {
        if (not np[i]) pri.push_back(i);
        for (auto j : pri) {
            if (i * j > n) break;
            np[i * j] = true;
            if (i % j == 0) break;
        }
    }
}

快速幂

1
2
3
4
5
6
7
auto pow(auto a, auto b, auto p) {
    auto res = 1;
    for (; b; b /= 2, a = 1ll * a * a % p)
        if (b % 2)
            res = 1ll * res * a % p;
    return res;
}

因数分解

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
auto facted(size_t n) {
    vector<size_t> res;
    for (size_t i = 2; i * i <= n; i++) {
        while (n % i == 0) {
            res.emplace_back(i);
            n /= i;
        }
    }
    if (n > 1)
        res.emplace_back(n);
    return res;
}
赣ICP备2024042422号
使用 Hugo 构建
主题 StackJimmy 设计