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