-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmodulo-multi.cpp
26 lines (26 loc) · 1.28 KB
/
modulo-multi.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
/// Name: Modulo (multiple)
/// Description: arithmetic
/// Detail:
/// Guarantee: struct MultiMint {
/// Dependencies: modulo
/// Parent:
template <typename T1, typename T2> struct MultiMint {
MultiMint():x(),y(){}
MultiMint(int raw):x(raw),y(raw){}
MultiMint(long long raw):x(raw),y(raw){}
MultiMint(unsigned raw):x(raw),y(raw){}
MultiMint(unsigned long long raw):x(raw),y(raw){}
MultiMint(T1 x, T2 y):x(x),y(y){}
friend MultiMint operator+(MultiMint a, MultiMint b) { return MultiMint(a.x + b.x, a.y + b.y); }
friend MultiMint operator-(MultiMint a, MultiMint b) { return MultiMint(a.x - b.x, a.y - b.y); }
friend MultiMint operator*(MultiMint a, MultiMint b) { return MultiMint(a.x * b.x, a.y * b.y); }
friend MultiMint operator/(MultiMint a, MultiMint b) { return MultiMint(a.x / b.x, a.y / b.y); }
friend MultiMint& operator+=(MultiMint& a, MultiMint b) { return a = a + b; }
friend MultiMint& operator-=(MultiMint& a, MultiMint b) { return a = a - b; }
friend MultiMint& operator*=(MultiMint& a, MultiMint b) { return a = a * b; }
friend MultiMint& operator/=(MultiMint& a, MultiMint b) { return a = a / b; }
friend bool operator==(MultiMint a, MultiMint b) { return a.x == b.x and a.y == b.y; }
friend bool operator!=(MultiMint a, MultiMint b) { return not (a == b); }
T1 x;
T2 y;
};