Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 246b47c

Browse files
committed
add FPS
1 parent a134c1b commit 246b47c

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ AtCoder解説放送ライブラリ集
2626
|Combination|[comb.cpp](comb.cpp)|nCkをmod素数で求める|
2727
|Matrix|[mat.cpp](mat.cpp)|行列|
2828
|素数|[prime.cpp](prime.cpp)|素数列挙と素因数分解|
29+
|FPS|[fps.cpp](fps.cpp)|形式的べき級数|
2930

3031
### グラフ
3132
|名前|コード|説明|

‎fps.cpp‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Formal Power Series
2+
using vm = vector<mint>;
3+
struct fps : vm {
4+
#define d (*this)
5+
#define s int(vm::size())
6+
template<class...Args> fps(Args...args): vm(args...) {}
7+
fps(initializer_list<mint> a): vm(a.begin(),a.end()) {}
8+
void rsz(int n) { if (s < n) resize(n);}
9+
mint& operator[](int i) { rsz(i+1); return vm::operator[](i);}
10+
mint operator[](int i) const { return i<s ? vm::operator[](i) : 0;}
11+
mint operator()(mint x) const {
12+
mint r;
13+
for (int i = s-1; i >= 0; --i) r = r*x+d[i];
14+
return r;
15+
}
16+
fps operator-() const { fps r(d); rep(i,s) r[i] = -r[i]; return r;}
17+
fps& operator+=(const fps& a) { rsz(a.size()); rep(i,a.size()) d[i] += a[i]; return d;}
18+
fps& operator-=(const fps& a) { rsz(a.size()); rep(i,a.size()) d[i] -= a[i]; return d;}
19+
fps& operator*=(const fps& a) { return d = convolution(d, a);}
20+
fps& operator*=(mint a) { rep(i,s) d[i] *= a; return *this;}
21+
fps& operator/=(mint a) { rep(i,s) d[i] /= a; return *this;}
22+
fps operator+(const fps& a) const { return fps(d) += a;}
23+
fps operator-(const fps& a) const { return fps(d) -= a;}
24+
fps operator*(const fps& a) const { return fps(d) *= a;}
25+
fps operator*(mint a) const { return fps(d) *= a;}
26+
fps operator/(mint a) const { return fps(d) /= a;}
27+
fps integ() const {
28+
fps r;
29+
rep(i,s) r[i+1] = d[i]/(i+1);
30+
return r;
31+
}
32+
#undef s
33+
#undef d
34+
};
35+
ostream& operator<<(ostream&o,const fps&a) {
36+
rep(i,a.size()) o<<(i?" ":"")<<a[i].val();
37+
return o;
38+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /