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