File tree Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
1
+ #ifndef CONGRUENCE
2
+ #define CONGRUENCE
3
+
4
+ typedef long long ll ;
5
+
6
+ /*
7
+ * 操作a与b,且结果对mod求余
8
+ * add : (a+b)%mod = (a%mod+b%mod)%mod
9
+ * sub : (a-b)%mod = (a%mod-b%mod+mod)%mod
10
+ * mul : (a*b)%mod = (a%mod)*(b%mod)%mod
11
+ * div : (a/b)%mod = a*(b^(-1))%mod
12
+ 若mod为一个质数,则有 x^(-1)%mod=x^(mod-2)%mod,次方操作需要采用快速幂
13
+ div :(a/b)%mod = (a%mod)*(b^(mod-2)%mod)%mod
14
+ */
15
+
16
+ long long quick_pow2_2 (ll a ,ll n ,ll mod )
17
+ {
18
+ if (a == 0 )
19
+ return 0 ;
20
+ a %=mod ;
21
+ long long ans = 1 ;
22
+ while (n != 0 )
23
+ {
24
+ if ((n & 1 )== 1 )
25
+ {
26
+ ans *=a ;
27
+ ans %=mod ;
28
+ }
29
+ a *=a ;
30
+ a %=mod ;
31
+ n >>=1 ;
32
+ }
33
+ return ans ;
34
+ }
35
+
36
+ ll add_mod (ll a ,ll b ,ll mod )
37
+ {
38
+ return (a %mod + b %mod )%mod ;
39
+ }
40
+
41
+ ll sub_mod (ll a ,ll b ,ll mod )
42
+ {
43
+ return (a %mod - b %mod + mod )%mod ;
44
+ }
45
+
46
+ ll mul_mod (ll a ,ll b ,ll mod )
47
+ {
48
+ return (a %mod )* (b %mod )%mod ;
49
+ }
50
+
51
+ ll div_mod (ll a ,ll b ,ll mod )
52
+ {
53
+ //mod必须为质数
54
+ return (a %mod )* quick_pow2_2 (b ,mod - 2 ,mod )%mod ;
55
+ }
56
+ #endif
You can’t perform that action at this time.
0 commit comments