cp-library

C++ Library for Competitive Programming

View the Project on GitHub emthrm/cp-library

:heavy_check_mark: 約数列挙
(include/emthrm/math/divisor.hpp)

時間計算量

$O(\sqrt{N})$

仕様

名前 戻り値
template <typename T>
std::vector<T> divisor(const T n);
$n$ の約数

参考文献

Submissons

https://onlinejudge.u-aizu.ac.jp/solutions/problem/2932/review/4088339/emthrm/C++14

Verified with

Code

#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
Back to top page