This documentation is automatically generated by online-judge-tools/verification-helper
#include "Src/Number/IntegerDivision.hpp"
整数同士の除算を行い、その結果に床関数や天井関数を適用したものを返す。
template <class T>
constexpr T DivFloor(T a, T b)
$\lfloor \frac{a}{b} \rfloor$ を計算する。
制約
T
は整数型であることtemplate <class T>
constexpr T DivCeil(T a, T b)
$\lceil \frac{a}{b} \rceil$ を計算する。
制約
T
は整数型であること#pragma once
#include <type_traits>
#include <cassert>
namespace zawa {
template <class T>
constexpr T DivFloor(T a, T b) {
static_assert(std::is_integral_v<T>, "DivFloor argument must be Integer");
assert(b != T{});
if constexpr (std::is_unsigned_v<T>) {
return a / b;
}
else {
if (b < 0) {
a *= -1;
b *= -1;
}
return (a >= 0 ? a / b : (a - b + 1) / b);
}
}
template <class T>
constexpr T DivCeil(T a, T b) {
static_assert(std::is_integral_v<T>, "DivCeil argument must be Integer");
assert(b != T{});
if constexpr (std::is_unsigned_v<T>) {
return (a + b - 1) / b;
}
else {
if (b < 0) {
a *= -1;
b *= -1;
}
return (a >= 0 ? (a + b - 1) / b : a / b);
}
}
} // namespace zawa
#line 2 "Src/Number/IntegerDivision.hpp"
#include <type_traits>
#include <cassert>
namespace zawa {
template <class T>
constexpr T DivFloor(T a, T b) {
static_assert(std::is_integral_v<T>, "DivFloor argument must be Integer");
assert(b != T{});
if constexpr (std::is_unsigned_v<T>) {
return a / b;
}
else {
if (b < 0) {
a *= -1;
b *= -1;
}
return (a >= 0 ? a / b : (a - b + 1) / b);
}
}
template <class T>
constexpr T DivCeil(T a, T b) {
static_assert(std::is_integral_v<T>, "DivCeil argument must be Integer");
assert(b != T{});
if constexpr (std::is_unsigned_v<T>) {
return (a + b - 1) / b;
}
else {
if (b < 0) {
a *= -1;
b *= -1;
}
return (a >= 0 ? (a + b - 1) / b : a / b);
}
}
} // namespace zawa