@@ -12,7 +12,7 @@ namespace weilycoder {
1212using u128 = unsigned __int128;
1313
1414template <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
2929template <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 */
4949template <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 */
6767template <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