模板「模板」数论素数筛 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; }