diff --git a/docs/02advanced/05monte-carlo/index.mdx b/docs/02advanced/05monte-carlo/index.mdx
index f4fe35954..cfb0fbc0e 100644
--- a/docs/02advanced/05monte-carlo/index.mdx
+++ b/docs/02advanced/05monte-carlo/index.mdx
@@ -8,3 +8,73 @@ import Answer from "@site/src/components/Answer";
# モンテカルロ法
ここでは、モンテカルロ法について学んでいきます。
+
+## モンテカルロ法とは
+
+世の中の現象は複雑なものが多いため、多くの問題は実際に厳密な解を求めることができません。そのため、コンピューターを用いて近似解を求める必要が出てきます。
+
+近似解を求める方法はいくつもありますがその一つに、大量のランダムな値を与えてそれで実際に計算してみてその結果から確率を求めるというものがあります。このシミュレーションがモンテカルロ法です。
+
+## 乱数
+
+ここで、Python で乱数を扱う方法を学んでいきましょう。ただし、ここで扱う乱数は真乱数ではなく擬似乱数であることに注意が必要です。
+
+### `random` 関数
+
+`random` ライブラリの `random` 関数は、0 以上 1 未満の一様乱数を生成します。
+
+
+
+### `uniform` 関数
+
+`random` ライブラリの `uniform` 関数は、任意の範囲の一様乱数を生成します。
+
+`uniform(a, b)` とすると、`a` 以上 `b` 以下の範囲の一様乱数を生成します。
+
+
+
+### `randrange` 関数
+
+`random` ライブラリの `randrange` 関数は、任意の範囲のランダムな整数を生成します。
+
+`randrange(start, stop, step)` とすると、`start` 以上 `stop` 未満の範囲でランダムな整数を生成します。`step` でステップを指定できます。
+
+
+
+### `randint` 関数
+
+`random` ライブラリの `randint` 関数は、任意の範囲のランダムな整数を生成します。
+
+`randint(a, b)` とすると、`a` 以上 `b` 以下の範囲のランダムな整数を生成します。
+
+
+
+## モンテカルロ法でコイン投げ
+
+モンテカルロ法を用いてコイン投げで表が出る確率を求めてみましょう。表が出る確率が $\frac{1}{2}$ なのは、すでに知っていると思いますが、モンテカルロ法の練習としてみてみましょう。
+
+
+
+実行回数を増やせば、精度がよくなります。
+
+## モンテカルロ法で円周率
+
+モンテカルロ法で円周率を求めてみましょう。
+次のように第一象限上で半径が 1 の扇形を考えます。
+$x$ 座標、$y$ 座標がともに $[0,1)$ の範囲にランダムに点をプロットしましょう。
+扇形上の面積は、$\frac{1}{2} r^2 \frac{\pi}{2}$ なので、扇形の上に点が乗る確率は、$\frac{1}{2} r^2 \frac{\pi}{2} = \frac{1}{4}\pi$ となります。
+
+これを使って、円周率を求めてみましょう。
+
+
+
+## 練習問題
+
+モンテカルロ法を用いて、サイコロ投げで 1 が出る確率を求めてみましょう。
+
+
+
+$\frac{1}{6} = 0.166\cdots$ になるはずです。
+
+
+
diff --git a/docs/index.mdx b/docs/index.mdx
index 32f23cd3d..1225e3b49 100644
--- a/docs/index.mdx
+++ b/docs/index.mdx
@@ -24,6 +24,10 @@ Python やアルゴリズムについて簡単にまとめていこうかなと
## 更新履歴
+1/1 第九週の分を執筆 モンテカルロ法
+
+12/25 第十週の分を執筆 探索
+
12/11 第八週の分を執筆 再帰
12/4 第七週の分を増訂 物体の運動のシミュレーション
diff --git a/static/monte-carlo/calc_pi.ipynb b/static/monte-carlo/calc_pi.ipynb
new file mode 100644
index 000000000..acb4c7434
--- /dev/null
+++ b/static/monte-carlo/calc_pi.ipynb
@@ -0,0 +1,43 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+ {
+ "metadata": {},
+ "source": [
+ "import random"
+ ],
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "source": [
+ "def calc_pi(n):\n",
+ " s = 0\n",
+ " for _ in range(n):\n",
+ " x = random.random()\n",
+ " y = random.random()\n",
+ " if x**2 + y**2 < 1:\n",
+ " s += 1\n",
+ " return s / n * 4\n",
+ "\n",
+ "\n",
+ "print(calc_pi(1000000))"
+ ],
+ "cell_type": "code",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "3.140648\n"
+ ]
+ }
+ ],
+ "execution_count": null
+ }
+ ]
+}
diff --git a/static/monte-carlo/coin_toss.ipynb b/static/monte-carlo/coin_toss.ipynb
new file mode 100644
index 000000000..211f56f8d
--- /dev/null
+++ b/static/monte-carlo/coin_toss.ipynb
@@ -0,0 +1,41 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+ {
+ "metadata": {},
+ "source": [
+ "import random"
+ ],
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "source": [
+ "def calc_coin_p(n):\n",
+ " head = 0\n",
+ " for _ in range(n):\n",
+ " if random.randint(0, 1) == 1:\n",
+ " head += 1\n",
+ " return head / n\n",
+ "\n",
+ "\n",
+ "print(calc_coin_p(100000))"
+ ],
+ "cell_type": "code",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "0.50153\n"
+ ]
+ }
+ ],
+ "execution_count": null
+ }
+ ]
+}
diff --git a/static/monte-carlo/dice.ipynb b/static/monte-carlo/dice.ipynb
new file mode 100644
index 000000000..7d47edb18
--- /dev/null
+++ b/static/monte-carlo/dice.ipynb
@@ -0,0 +1,41 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+ {
+ "metadata": {},
+ "source": [
+ "import random"
+ ],
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "source": [
+ "def calc_dice_p(n):\n",
+ " one = 0\n",
+ " for _ in range(n):\n",
+ " if random.randint(1, 6) == 1:\n",
+ " one += 1\n",
+ " return one / n\n",
+ "\n",
+ "\n",
+ "print(calc_dice_p(100000))"
+ ],
+ "cell_type": "code",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "0.1681\n"
+ ]
+ }
+ ],
+ "execution_count": null
+ }
+ ]
+}
diff --git a/static/monte-carlo/randint.ipynb b/static/monte-carlo/randint.ipynb
new file mode 100644
index 000000000..67b50182a
--- /dev/null
+++ b/static/monte-carlo/randint.ipynb
@@ -0,0 +1,33 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+ {
+ "metadata": {},
+ "source": [
+ "import random"
+ ],
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "source": [
+ "print(random.randint(2, 4))"
+ ],
+ "cell_type": "code",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "4\n"
+ ]
+ }
+ ],
+ "execution_count": null
+ }
+ ]
+}
diff --git a/static/monte-carlo/random.ipynb b/static/monte-carlo/random.ipynb
new file mode 100644
index 000000000..73fed4d30
--- /dev/null
+++ b/static/monte-carlo/random.ipynb
@@ -0,0 +1,33 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+ {
+ "metadata": {},
+ "source": [
+ "import random"
+ ],
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "source": [
+ "print(random.random())"
+ ],
+ "cell_type": "code",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "0.701225927526422\n"
+ ]
+ }
+ ],
+ "execution_count": null
+ }
+ ]
+}
diff --git a/static/monte-carlo/randrange.ipynb b/static/monte-carlo/randrange.ipynb
new file mode 100644
index 000000000..28f9347ff
--- /dev/null
+++ b/static/monte-carlo/randrange.ipynb
@@ -0,0 +1,33 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+ {
+ "metadata": {},
+ "source": [
+ "import random"
+ ],
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "source": [
+ "print(random.randrange(2, 4, 1))"
+ ],
+ "cell_type": "code",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "3\n"
+ ]
+ }
+ ],
+ "execution_count": null
+ }
+ ]
+}
diff --git a/static/monte-carlo/uniform.ipynb b/static/monte-carlo/uniform.ipynb
new file mode 100644
index 000000000..28d653f5d
--- /dev/null
+++ b/static/monte-carlo/uniform.ipynb
@@ -0,0 +1,33 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+ {
+ "metadata": {},
+ "source": [
+ "import random"
+ ],
+ "cell_type": "code",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "source": [
+ "print(random.uniform(2, 4))"
+ ],
+ "cell_type": "code",
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "3.8650468552312107\n"
+ ]
+ }
+ ],
+ "execution_count": null
+ }
+ ]
+}