C++ Library for Competitive Programming
#include "emthrm/math/enumerate_quotients.hpp"$O(\sqrt{N})$
| 名前 | 戻り値 |
|---|---|
template <typename T>std::vector<std::tuple<T, T, T>> enumerate_quotients(const T n);
|
$\lbrace (l, r, q) \mid \forall x \in \lbrace l, l + 1, \ldots, r - 1 \rbrace,\ \lfloor \frac{n}{x} \rfloor = q \rbrace$ |
備考1
備考2
https://judge.yosupo.jp/submission/137127
#ifndef EMTHRM_MATH_ENUMERATE_QUOTIENTS_HPP_
#define EMTHRM_MATH_ENUMERATE_QUOTIENTS_HPP_
#include <tuple>
#include <vector>
namespace emthrm {
template <typename T>
std::vector<std::tuple<T, T, T>> enumerate_quotients(const T n) {
std::vector<std::tuple<T, T, T>> quotients;
for (T l = 1; l <= n;) {
const T quotient = n / l, r = n / quotient + 1;
quotients.emplace_back(l, r, quotient);
l = r;
}
return quotients;
}
} // namespace emthrm
#endif // EMTHRM_MATH_ENUMERATE_QUOTIENTS_HPP_#line 1 "include/emthrm/math/enumerate_quotients.hpp"
#include <tuple>
#include <vector>
namespace emthrm {
template <typename T>
std::vector<std::tuple<T, T, T>> enumerate_quotients(const T n) {
std::vector<std::tuple<T, T, T>> quotients;
for (T l = 1; l <= n;) {
const T quotient = n / l, r = n / quotient + 1;
quotients.emplace_back(l, r, quotient);
l = r;
}
return quotients;
}
} // namespace emthrm