src/nt/inverse/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../gl/inv_gcd/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | // simple but slower: inv(n, mod) -> 1 < n ? mod - inv(mod % n, n) * mod / n : 1; | ||
| 8 | template <uint_c T, uint_c U> | ||
| 9 | 2558989587 | CEXP U inverse(T n, U mod) NE { | |
| 10 | 2558989587 | auto [g, x] = inv_gcd(U(n % mod), mod); | |
| 11 |
2/4unsigned int tifa_libs::inverse<unsigned int, unsigned int>(unsigned int, unsigned int):
✗ Branch 0 not taken.
✓ Branch 1 taken 1447272605 times.
unsigned long tifa_libs::inverse<unsigned long, unsigned long>(unsigned long, unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 565929067 times.
|
2558989587 | assert(g == 1); |
| 12 | 2558989587 | return x; | |
| 13 | } | ||
| 14 | |||
| 15 | } // namespace tifa_libs | ||
| 16 |