| 6 | |
| 7 | using mint = static_modint<11>; |
| 8 | int main() { |
| 9 | mint a = 10; |
| 10 | mint b(3); |
| 11 | |
| 12 | // equal |
| 13 | assert(a == 21); |
| 14 | assert(a == -1); |
| 15 | assert(-1 == a); |
| 16 | |
| 17 | // negative |
| 18 | assert(-b == 8); |
| 19 | |
| 20 | // plus |
| 21 | assert(a + b == 2); // (10 + 3) mod 11 |
| 22 | assert(1 + a == 0); |
| 23 | |
| 24 | // minus |
| 25 | assert(a - b == 7); // (10 - 3) mod 11 |
| 26 | assert(b - a == 4); |
| 27 | |
| 28 | // mul |
| 29 | assert(a * b == 8); // (10 * 3) mod 11 |
| 30 | |
| 31 | // inv |
| 32 | assert(b.inv() == 4); // (3 * 4) mod 11 == 1 |
| 33 | |
| 34 | // div |
| 35 | assert(a / b == 7); // (10 * 4) mod 11 |
| 36 | |
| 37 | // +=, -=, *=, /= |
| 38 | a += b; |
| 39 | assert(a == 2 && b == 3); |
| 40 | a -= b; |
| 41 | assert(a == 10 && b == 3); |
| 42 | a *= b; |
| 43 | assert(a == 8 && b == 3); |
| 44 | a /= b; |
| 45 | assert(a == 10 && b == 3); |
| 46 | |
| 47 | // pow |
| 48 | assert(mint(2).pow(4) == 5); // 16 mod 11 |
| 49 | |
| 50 | // print value |
| 51 | printf("%d\n", a.val()); // 10 |
| 52 | |
| 53 | // get mod |
| 54 | assert(mint::mod() == 11 && a.mod() == 11); |
| 55 | |
| 56 | // mint(x) と書くとmodを取る操作が発生します((x % mod + mod) % modをmodintに代入します) |
| 57 | // mint::raw(x) はxをmodを取らずに代入するので高速です(もちろんxが[0, mod)であることを利用者が保証しないといけません) |
| 58 | assert(mint::raw(3) == 3); |
| 59 | } |