src/math/qpow/mod/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../mul_mod/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | 237430360 | CEXP u64 qpow_mod(u64 a, u64 b, u64 mod) NE { | |
| 8 | 237430360 | u64 res(1); | |
| 9 |
2/2✓ Branch 1 taken 2136075339 times.
✓ Branch 2 taken 237430360 times.
|
2373505699 | for (a %= mod; b; b >>= 1, a = mul_mod_u(a, a, mod)) { |
| 10 |
2/2✓ Branch 1 taken 3304598474 times.
✓ Branch 2 taken 2136075339 times.
|
5440673813 | while (!(b & 1)) b >>= 1, a = mul_mod_u(a, a, mod); |
| 11 | 2136075339 | res = mul_mod_u(res, a, mod); | |
| 12 | } | ||
| 13 | 237430360 | return res; | |
| 14 | } | ||
| 15 | |||
| 16 | } // namespace tifa_libs | ||
| 17 |