
はじめに
どんなきっかけか忘れましたが、Youtube動画のおすすめに、清水亮さんの動画が出て興味深かったので、記事にしてみました。
ハッカー魂 アルゴリズムの基本を文系にもわかるように解説した

ハッカー魂 アルゴリズムの基本を文系にもわかるように解説した
哲学者の東浩紀さんがプログラミングを勉強しようとしているということで、僕としても思い入れのあるアルゴリズム「エラトステネスの篩」について、ライブコーディングしながら語ったシラス番組の抜粋です。本編は300円から視聴可能https://shirasu.io/t/zelpm/c/shi3zlab/p/20240105...
https://youtu.be/iQEabtN9F78動画の中で語られていますが、清水さんが学生時代に数学の授業で素数を提出する課題があり、パソコンを使ってもいいという条件があってその場合、1万個以下まで提出するのが条件だとか。
そこで利用したのが「エラトステネスの篩」というアルゴリズムで、当時はBASIC言語で答えを求めたとの事で、それに誘発されて、MSX BASICの動くWebMSXで動かしてみました。
![[WebMSX] 自前でMSXサイトを作成](https://humanxai.info/images/uploads/WebMSX-Hugo-Netlify.webp)
[WebMSX] 自前でMSXサイトを作成
WebMSXを活用しWEBサイトでMSXを動作させる方法の紹介
https://humanxai.info/posts/webmsx-hugo-netlify/🏺紀元前から続く数の冒険
「エラトステネスの篩(ふるい)」という名前を聞いたことがありますか? このアルゴリズムは、紀元前3世紀のギリシャの学者エラトステネスによって考案されました。 「素数をどうやって見つけるか?」という、シンプルで奥深い問いに対する最古級のアルゴリズムです。
💡 素数とは?
まず、素数(prime number)とは何かを簡単におさらいしましょう。
素数とは、「1と自分自身」以外に約数を持たない、1より大きな自然数のこと。
例:
- 2, 3, 5, 7, 11, 13, … は素数。
- 4(=2×2)、6(=2×3)、9(=3×3)などは合成数(複数の因数を持つ)です。
🧠 エラトステネスの篩とは?
エラトステネスの篩は、合成数をふるい落とすことで素数だけを残す、非常に効率的なアルゴリズムです。
手順(100までの素数を求める例):
- 2 〜 100 の数をすべて並べる。
- 2は素数なので残す。2の倍数をすべて消す。
- 次に残った3も素数。3の倍数をすべて消す。
- 次に残った5も素数。5の倍数をすべて消す。
- √100 ≒ 10 まで繰り返す。
- 残った数がすべて素数。
まるで「ザルで余分な数を落とす」ような動き。 このアルゴリズムが“篩(ふるい)”と呼ばれる理由です。
📜 BASICでの実装(MSX風)
10 DIM P(10000)
20 FOR I=2 TO 10000: P(I)=1: NEXT I
30 FOR I=2 TO 100
40 IF P(I)=1 THEN GOSUB 1000
50 NEXT I
60 FOR I=2 TO 10000
70 IF P(I)=1 THEN PRINT I
80 NEXT I
90 END
1000 FOR J=I*2 TO 10000 STEP I
1010 P(J)=0
1020 NEXT J
1030 RETURN
P(I)=1
は「素数の可能性あり」を意味します。- 倍数を
0
にして「合成数」として消していきます。
✅ WebMSXなどで動かせば、実際に素数一覧を高速で出力してくれます。
スクロールする数の美しさに、思わず息を呑むはず。
実際動かしてみましたが、1万だとアウトオブレンジになったので、実機では厳しそうです。 なので、1000にしました。

🌐 JavaScriptでの実装
function sieve(n) {
const prime = Array(n + 1).fill(true);
prime[0] = prime[1] = false;
for (let i = 2; i * i <= n; i++) {
if (prime[i]) {
for (let j = i * 2; j <= n; j += i) {
prime[j] = false;
}
}
}
return prime.map((v, i) => v ? i : null).filter(v => v);
}
console.log(sieve(100)); // 100以下の素数を表示
BASICよりも短く、読みやすいコードで同じ処理を実現しています。

🧬 現代でも使われているの?
エラトステネスの篩は、現在でも十分に高速で簡潔な素数探索法として知られています。 大きな数まで求める際は「メモリ効率を改善した高速なバリエーション」も登場しています(例えば:Segmented Sieve や Bit Sieve)。
現代のRSA暗号などでも素数は重要な役割を持ち、篩の考え方は基礎技術として活きています。
✨ 感動する数学の瞬間
あなたは、教室で1人、問題が「解けてしまう」ことに感動した経験はありませんか? 公式を使えば難問がスッと解ける。 それは、まるで暗闇で見つけた一筋の光のような瞬間です。
エラトステネスの篩も、そうした“感動”を今なお与えてくれるアルゴリズムのひとつです。
📝 まとめ
項目 | 内容 |
---|---|
発案者 | エラトステネス(紀元前3世紀) |
アルゴリズム | 合成数を除外して素数を見つける |
実装例 | BASIC(WebMSX)、JavaScript |
応用例 | 素数探索、暗号、数学教育 |
📎 リンクと参考資料
✍️ おわりに
エラトステネスの篩は、古代から現代まで「シンプルな美しさ」と「応用力」を兼ね備えた傑作です。 このアルゴリズムを知った瞬間、あなたの中の“数学する心”が、またひとつ目を覚ますかもしれません。
関連リンク
![[WebMSX] 自前でMSXサイトを作成](https://humanxai.info/images/uploads/WebMSX-Hugo-Netlify.webp)
[WebMSX] 自前でMSXサイトを作成
WebMSXを活用しWEBサイトでMSXを動作させる方法の紹介
https://humanxai.info/posts/webmsx-hugo-netlify/
💬 コメント