ホーム
/
作ったもの
/
考えたこと
/
きろく

競プロ頻出数値表・公式集

計算量見積もり・計算量削減

頻繁に用いる数値のサイズの見積もりや、畳み込みなどの公式を集めておきました。

数値表

計算量見積もりやデータ型の限界(オーバーフロー)確認に便利な概算表です。

2の累乗 \(2^n\)

\(n\) 正確な値 概算
10 1,024 \(1.02 \times 10^3\)
15 32,768 \(3.28 \times 10^4\)
20 1,048,576 \(1.05 \times 10^6\)
25 33,554,432 \(3.36 \times 10^7\)
30 1,073,741,824 \(1.07 \times 10^9\)
31 2,147,483,648 \(2.15 \times 10^9\)
40 1,099,511,627,776 \(1.10 \times 10^{12}\)
50 1,125,899,906,842,624 \(1.13 \times 10^{15}\)
60 1,152,921,504,606,846,976 \(1.15 \times 10^{18}\)
63 9,223,372,036,854,775,808 \(9.22 \times 10^{18}\)

※ \(2^{31}-1\) は32bit符号付き整数(int)の最大値、\(2^{63}-1\) は64bit符号付き整数(long long)の最大値です。

フィボナッチ数 \(F_n\)

\(n\) 正確な値 概算
10 55 \(5.50 \times 10^1\)
20 6,765 \(6.76 \times 10^3\)
30 832,040 \(8.32 \times 10^5\)
40 102,334,155 \(1.02 \times 10^8\)
45 1,134,903,170 \(1.13 \times 10^9\)
50 12,586,269,025 \(1.26 \times 10^{10}\)
60 1,548,008,755,920 \(1.55 \times 10^{12}\)
70 190,392,490,709,135 \(1.90 \times 10^{14}\)
80 23,416,728,348,467,685 \(2.34 \times 10^{16}\)
90 2,880,067,194,370,816,120 \(2.88 \times 10^{18}\)

※ \(F_{45}\) 付近で32bit上限を、\(F_{92}\) 付近で64bit上限を超えます。

二項係数 \({}_{2n}\mathrm{C}_n\)

\(n\) 正確な値 概算
10 184,756 \(1.85 \times 10^5\)
15 155,117,520 \(1.55 \times 10^8\)
20 137,846,528,820 \(1.38 \times 10^{11}\)
25 126,410,606,437,752 \(1.26 \times 10^{14}\)
30 118,264,581,564,861,424 \(1.18 \times 10^{17}\)
33 7,219,315,550,148,874,272 \(7.22 \times 10^{18}\)

※ 中央の二項係数は最も大きくなります。\(n=33\) (\({}_{66}\mathrm{C}_{33}\)) で64bit上限に近づきます。

階乗 \(n!\)

\(n\) 正確な値 概算
5 120 \(1.20 \times 10^2\)
8 40,320 \(4.03 \times 10^4\)
10 3,628,800 \(3.63 \times 10^6\)
12 479,001,600 \(4.79 \times 10^8\)
15 1,307,674,368,000 \(1.31 \times 10^{12}\)
20 2,432,902,008,176,640,000 \(2.43 \times 10^{18}\)

※ 順列の全探索 \(O(N!)\) が現実的なのは \(N=10 \sim 11\) 程度までです。

\(10^n\) 以下の素数の個数 \(\pi(X)\)

\(n\) 範囲 \(X = 10^n\) 素数の個数 \(\pi(X)\)
2 100 25
3 1,000 168
4 10,000 1,229
5 100,000 9,592
6 1,000,000 78,498
7 10,000,000 664,579
8 100,000,000 5,761,455
9 1,000,000,000 50,847,534
12 1,000,000,000,000 37,607,912,018

※ エラトステネスの篩の計算量や、素因数分解の個数見積もりに役立ちます。\(10^6\) 以下の素数は約7.8万個、\(10^9\) 以下は約5000万個です。

高度合成数(約数の個数)

高度合成数 \(N\) 約数の個数 備考・主な閾値
7,560 64 \(10^4\) 以下で最多
98,280 128 \(10^5\) 以下で最多
720,720 240 \(10^6\) 以下で最多(約数全探索が超余裕)
7,351,344,000 1,344 \(10^9\) 以下で最多(\(O(N\) の約数個数\()\) が余裕)
9,637,611,984,000 6,720 \(10^{12}\) 以下で最多
9,979,291,666,558,4000 26,880 \(10^{18}\) 以下で最多(64bit型で約数最多)

※ 「その数未満のどの自然数よりも約数の個数が多い数」です。\(10^9\) 以下の値でも約数は高々1344個、`long long` の限界付近でも26880個にしかならないため、約数を全列挙した後の処理は非常に高速に動作します。

公式集

ヴァンデルモンドの畳み込み
$$ \sum_{k=0}^r \binom{m}{k}\binom{n}{r-k} = \binom{m+n}{r} $$

サイズ $m$ の集合とサイズ $n$ の集合から合わせて $r$ 個を選ぶ方法は、全体の $m+n$ 個から $r$ 個を選ぶ方法に等しいという恒等式。

ホッケースティック恒等式
$$ \sum_{k=r}^n \binom{k}{r} = \binom{n+1}{r+1} $$

パスカルの三角形において、ある列に沿って足し合わせた和が斜め下の値に等しくなる性質。

多項係数と二項係数
$$ \binom{n}{k_1,k_2,\dots,k_m} = \binom{n}{k_1} \binom{n-k_1}{k_2} \binom{n-k_1-k_2}{k_3} \cdots \binom{n-k_1-\cdots-k_{m-1}}{k_m} $$

全体からまず $k_1$ 個を選び、残りから $k_2$ 個、さらに残りから $k_3$ 個というように選んでいく過程に対応している。

互換と置換の積

$p$ を素数、$x$ を非負整数とする。$r$ を $p$ と互いに素な非負整数として、$x = rp^k$ と書けるとき、以下が成り立つ: $$x \equiv (r \text{ mod } p^e) \times p^k \pmod {p^e}$$

互換と置換の積

$P$ を置換として、$P(a\ b) = (P(a) P(b))P$ が成り立つ。

巡回置換の共役

$P$ を置換として、$P (a_1\ a_2\ \dots\ a_k) P^{-1} = (P(a_1)\ P(a_2)\ \dots\ P(a_k))$ が成り立つ。

和と排他的論理和の関係

$x + y = x \oplus y + 2 (x \land y)$

切り上げ (Ceiling) の床関数変換

$\left\lceil \frac{X}{M} \right\rceil = \left\lfloor \frac{X + M - 1}{M} \right\rfloor$

四捨五入 (Round) の床関数変換

$\text{round}\left( \frac{X}{M} \right) = \left\lfloor \frac{2X + M}{2M} \right\rfloor$

$K$ 進法における $d$ 桁目の抽出

整数 $X$ の $K$ 進法における $d$ 桁目の数字 (0-indexed):

$\left( \left\lfloor \frac{X}{K^d} \right\rfloor \bmod K \right) = \left\lfloor \frac{X}{K^d} \right\rfloor - K \cdot \left\lfloor \frac{X}{K^{d+1}} \right\rfloor$

ピックの定理

頂点がすべて格子点上にある自己交差のない多角形の面積 $S$ は、内部の格子点の数を $I$、周上の格子点の数を $B$ とすると、 $S = I + \frac{B}{2} - 1$ が成り立つ。

バーンサイドの補題

有限群 $G$ が集合 $X$ に作用しているとき、同値類(軌道)の個数 $|X/G|$ は、各 $g \in G$ による固定点集合を $X^g = \{ x \in X \mid g \cdot x = x \}$ として、以下が成り立つ。 $$|X/G| = \frac{1}{|G|} \sum_{g \in G} |X^g|$$

平面グラフにおける頂点・辺・サイクル・連結成分の関係式

平面グラフにおいて、頂点数を $V$、辺数を $E$、独立なサイクルの個数(内側の面の数)を $L$、連結成分の数を $C$ とすると、以下の関係式が成り立つ: $$C = V - E + L$$ (※ サイクルが存在しない森の場合は $L = 0$ となり、$C = V - E$ が成り立つ。)

木の直径に関する性質

木の直径の両端点を $u,v$ とすると、$u$ から最も距離が遠い頂点の一つが $v$ であり、逆も同様である。したがって、任意の頂点 $s$ から最も遠い頂点 $u$ を求め、さらに $u$ から最も遠い頂点 $v$ を求めれば、 $u,v$ は木の直径の両端点となり、 $$d(u,v)=\operatorname{diam}(T)$$ が成り立つ。この性質は、辺に非負の重みを付けた重み付き木でも、 距離を辺重みの総和として定義すれば成り立つ。

固定した頂点から最も遠い頂点と直径の端点

木 $T$ の頂点 $s$ を一つ固定する。 このとき、直径の両端点を $u,v$ とすれば、そのいずれかは $s$ から最も遠い点である。 なお、これは重み付きでも成立する。

Hallの結婚定理

2部グラフ $G = (U \cup V, E)$ において、$U$ のすべての頂点をカバーするマッチングが存在するための必要十分条件は、任意の $S \subseteq U$ に対して $|N(S)| \ge |S|$ が成り立つことである。ここで、$N(S)$ は $S$ に隣接する頂点の集合を表す。

Undirected Vertex Geography の必勝条件

無向グラフ $G$ と開始頂点 $s$ 上で行われる Undirected Vertex Geography において、先手必勝であるための必要十分条件は、$G$ のすべての最大マッチングが頂点 $s$ をカバーすること(すなわち、$s$ を含まない最大マッチングが存在しないこと)である。

ラグランジュ補間

多項式 $P(x)$ が $N + 1$ 個の点 $(x_i,y_i)$ を通るときの $P$ の明示的な式。

$$P(x) = \sum_{i=0}^N y_i \prod_{j \neq i} \frac{x - x_j}{x_i - x_j}$$

特に評価点が $x = 0, 1, \dots, N$ のように連続している場合、分母が階乗の積になり、分子の累積積を前計算しておくことで、通常 $O(N^2)$ かかる補間を $O(N)$ に落とすことができます。

達成するまでにかかる回数の期待値

$$ \text{達成するまでの回数の期待値} = (\text{1回以上かかる確率}) + (\text{2回以上かかる確率}) + \dots $$