Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
fraction.hpp
[詳解]
1#include"../../kyopro_library/template.hpp"
2
3/// @brief 有理数構造体
4template<typename T=ll>
5struct Fraction {
7 Fraction()=default;
8
9 /// @brief 有理数 a/b を宣言する
10 Fraction(T a, T b) {
11 T g=gcd(a,b);
12 upper=a/g,lower=b/g;
13 if(lower<0) upper*=-1,lower*=-1;
14 }
15
16 Fraction(T a=0) { upper=a,lower=1; }
17
22
23 Fraction operator+=(const Fraction& f) { return *this=*this+f; }
24 Fraction operator-=(const Fraction& f) { return *this=*this-f; }
25 Fraction operator*=(const Fraction& f) { return *this=*this*f; }
26 Fraction operator/=(const Fraction& f) { return *this=*this/f; }
27
28 Fraction operator+(const T& f) { return Fraction(upper+f*lower,lower); }
29 Fraction operator-(const T& f) { return Fraction(upper-f*lower,lower); }
30 Fraction operator*(const T& f) { return Fraction(upper*f,lower); }
31 Fraction operator/(const T& f) { return Fraction(upper,lower*f); }
32
33 Fraction operator+=(const T& f) { return *this=*this+f; }
34 Fraction operator-=(const T& f) { return *this=*this-f; }
35 Fraction operator*=(const T& f) { return *this=*this*f; }
36 Fraction operator/=(const T& f) { return *this=*this/f; }
37
39
40 bool operator==(const Fraction& f) const { return upper==f.upper&&lower==f.lower; }
41 bool operator!=(const Fraction& f) const { return upper!=f.upper||lower!=f.lower; }
42 bool operator<(const Fraction& f) const { return upper*f.lower<f.upper*lower; }
43 bool operator<=(const Fraction& f) const { return upper*f.lower<=f.upper*lower; }
44 bool operator>(const Fraction& f) const { return upper*f.lower>f.upper*lower; }
45 bool operator>=(const Fraction& f) const { return upper*f.lower>=f.upper*lower; }
46 bool operator==(const T& f) const {return upper==f&&lower==1; }
47 bool operator!=(const T& f) const {return upper!=f||lower!=1; }
48 bool operator<(const T& f) const {return upper<f*lower; }
49 bool operator<=(const T& f) const {return upper<=f*lower; }
50 bool operator>(const T& f) const {return upper>f*lower; }
51 bool operator>=(const T& f) const {return upper>=f*lower; }
52
53 friend ostream& operator<<(ostream& os, const Fraction& f) {
54 os<<f.upper<<"/"<<f.lower;
55 return os;
56 }
57
58private:
59 T gcd(T a, T b) {
60 while(b!=0) {
61 T r=a%b;
62 a=b;
63 b=r;
64 }
65 return a;
66 }
67};
有理数構造体
Definition fraction.hpp:5
bool operator==(const Fraction &f) const
Definition fraction.hpp:40
Fraction operator/(const Fraction &f)
Definition fraction.hpp:21
Fraction operator*(const T &f)
Definition fraction.hpp:30
Fraction operator+=(const T &f)
Definition fraction.hpp:33
bool operator!=(const Fraction &f) const
Definition fraction.hpp:41
bool operator<(const Fraction &f) const
Definition fraction.hpp:42
Fraction operator-=(const T &f)
Definition fraction.hpp:34
Fraction operator-()
Definition fraction.hpp:38
Fraction operator/=(const Fraction &f)
Definition fraction.hpp:26
Fraction operator*=(const Fraction &f)
Definition fraction.hpp:25
friend ostream & operator<<(ostream &os, const Fraction &f)
Definition fraction.hpp:53
Fraction operator/=(const T &f)
Definition fraction.hpp:36
Fraction(T a, T b)
有理数 a/b を宣言する
Definition fraction.hpp:10
bool operator<=(const Fraction &f) const
Definition fraction.hpp:43
Fraction()=default
bool operator>=(const T &f) const
Definition fraction.hpp:51
Fraction operator+(const Fraction &f)
Definition fraction.hpp:18
Fraction operator+=(const Fraction &f)
Definition fraction.hpp:23
Fraction operator-=(const Fraction &f)
Definition fraction.hpp:24
bool operator>(const Fraction &f) const
Definition fraction.hpp:44
Fraction operator*=(const T &f)
Definition fraction.hpp:35
bool operator>=(const Fraction &f) const
Definition fraction.hpp:45
Fraction operator-(const Fraction &f)
Definition fraction.hpp:19
Fraction operator+(const T &f)
Definition fraction.hpp:28
Fraction operator-(const T &f)
Definition fraction.hpp:29
bool operator==(const T &f) const
Definition fraction.hpp:46
Fraction operator/(const T &f)
Definition fraction.hpp:31
Fraction operator*(const Fraction &f)
Definition fraction.hpp:20
Fraction(T a=0)
Definition fraction.hpp:16
bool operator!=(const T &f) const
Definition fraction.hpp:47
bool operator<=(const T &f) const
Definition fraction.hpp:49
bool operator>(const T &f) const
Definition fraction.hpp:50
bool operator<(const T &f) const
Definition fraction.hpp:48