-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrational.cpp
More file actions
30 lines (25 loc) · 787 Bytes
/
rational.cpp
File metadata and controls
30 lines (25 loc) · 787 Bytes
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
struct Rational {
LL q, p;
Rational() {}
Rational(LL qq, LL pp): q(qq), p(pp) {
assert(p > 0);
LL d = gcd(abs(q), p);
p /= d;
q /= d;
}
};
Rational operator-(const Rational &r1, const Rational &r2) {
return Rational(r1.q * r2.p - r2.q * r1.p, r1.p * r2.p);
}
Rational operator+(const Rational &r1, const Rational &r2) {
return Rational(r1.q * r2.p + r2.q * r1.p, r1.p * r2.p);
}
bool operator>=(const Rational &r1, const Rational &r2) {
return (__int128)r1.q * r2.p >= (__int128)r2.q * r1.p;
}
bool operator<=(const Rational &r1, const Rational &r2) {
return (__int128)r1.q * r2.p <= (__int128)r2.q * r1.p;
}
Rational operator*(const Rational &r1, const Rational &r2) {
return Rational(r1.q * r2.q, r1.p * r2.p);
}