C++ Library for Competitive Programming
#include "emthrm/math/divisor.hpp"
$O(\sqrt{N})$
名前 | 戻り値 |
---|---|
template <typename T> std::vector<T> divisor(const T n);
|
$n$ の約数 |
https://onlinejudge.u-aizu.ac.jp/solutions/problem/2932/review/4088339/emthrm/C++14
#ifndef EMTHRM_MATH_DIVISOR_HPP_
#define EMTHRM_MATH_DIVISOR_HPP_
#include <algorithm>
#include <vector>
namespace emthrm {
template <typename T>
std::vector<T> divisor(const T n) {
std::vector<T> res;
T i = 1;
for (; i * i < n; ++i) {
if (n % i == 0) [[unlikely]] {
res.emplace_back(i);
res.emplace_back(n / i);
}
}
if (i * i == n && n % i == 0) res.emplace_back(i);
std::sort(res.begin(), res.end());
return res;
}
} // namespace emthrm
#endif // EMTHRM_MATH_DIVISOR_HPP_
#line 1 "include/emthrm/math/divisor.hpp"
#include <algorithm>
#include <vector>
namespace emthrm {
template <typename T>
std::vector<T> divisor(const T n) {
std::vector<T> res;
T i = 1;
for (; i * i < n; ++i) {
if (n % i == 0) [[unlikely]] {
res.emplace_back(i);
res.emplace_back(n / i);
}
}
if (i * i == n && n % i == 0) res.emplace_back(i);
std::sort(res.begin(), res.end());
return res;
}
} // namespace emthrm