Skip to content

Commit a2d08ca

Browse files
committed
refactor: Change return type of modular arithmetic functions to constexpr for improved compile-time evaluation
1 parent 30b97a5 commit a2d08ca

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

weilycoder/number-theory/mod_utility.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace weilycoder {
1212
using u128 = unsigned __int128;
1313

1414
template <bool bit32 = false>
15-
uint64_t mod_add(uint64_t a, uint64_t b, uint64_t modulus) {
15+
constexpr uint64_t mod_add(uint64_t a, uint64_t b, uint64_t modulus) {
1616
if constexpr (bit32) {
1717
uint64_t res = a + b;
1818
if (res >= modulus)
@@ -27,7 +27,7 @@ uint64_t mod_add(uint64_t a, uint64_t b, uint64_t modulus) {
2727
}
2828

2929
template <bool bit32 = false>
30-
uint64_t mod_sub(uint64_t a, uint64_t b, uint64_t modulus) {
30+
constexpr uint64_t mod_sub(uint64_t a, uint64_t b, uint64_t modulus) {
3131
if constexpr (bit32) {
3232
uint64_t res = (a >= b) ? (a - b) : (modulus + a - b);
3333
return res;
@@ -47,7 +47,7 @@ uint64_t mod_sub(uint64_t a, uint64_t b, uint64_t modulus) {
4747
* @return (a * b) % modulus
4848
*/
4949
template <bool bit32 = false>
50-
uint64_t mod_mul(uint64_t a, uint64_t b, uint64_t modulus) {
50+
constexpr uint64_t mod_mul(uint64_t a, uint64_t b, uint64_t modulus) {
5151
if constexpr (bit32)
5252
return a * b % modulus;
5353
else
@@ -65,7 +65,7 @@ uint64_t mod_mul(uint64_t a, uint64_t b, uint64_t modulus) {
6565
* @return (a * b) % Modulus
6666
*/
6767
template <uint64_t Modulus, bool bit32 = false>
68-
uint64_t mod_mul(uint64_t a, uint64_t b) {
68+
constexpr uint64_t mod_mul(uint64_t a, uint64_t b) {
6969
if constexpr (bit32)
7070
return a * b % Modulus;
7171
else

0 commit comments

Comments
 (0)