無料オンライン素数ジェネレーター | 範囲指定・ランダム生成
コピー時の区切り文字
素数とは?
素数とは、1より大きい自然数で、1とその数自身以外には割り切れない数のことです。最小の素数は2, 3, 5, 7, 11, 13, 17, 19, 23, 29…です。2は唯一の偶数の素数であり、他のすべての偶数は2で割り切れるため、合成数です。
4 (= 2 × 2), 6 (= 2 × 3), 15 (= 3 × 5) のような数は素数ではありません。これらは合成数と呼ばれます。
ジェネレーターの仕組み
指定範囲内のすべての素数をリストアップするために、エラトステネスの篩を使用しています。これは紀元前240年頃にギリシャの数学者エラトステネスによって記述された、最も古く効果的なアルゴリズムの一つです。
このアルゴリズムは、見つかった各素数の倍数を順番にふるい落としていきます。残ったものが素数です。計算はすべてブラウザ内で直接行われ、サーバーにデータが送信されることはありません。
ランダム選択の場合、ジェネレーターはまず範囲内のすべての素数のリストを作成し、その後、暗号学的に安全なジェネレーター(crypto.getRandomValues())を使用して、そのリストから必要な数の素数をランダムに選択します。
ジェネレーターの機能
- すべての素数 – 指定された範囲内のすべての素数をリストアップします(最大10,000個)
- ランダム選択 – 範囲からN個の素数をランダムに選択します(広範囲に適しています)
- ソート – 結果を昇順に並べ替えます
- 区切り文字 – コピー時に数値をどのように区切るかを選択します
- クイックプリセット – よく使う範囲をワンクリックで設定します
素数はどこで使われている?
暗号化とセキュリティ
素数は現代暗号の基礎です。RSAのようなアルゴリズムは、2つの大きな素数の積を計算するのは簡単ですが、その積を素因数分解して元に戻すのは計算上非常に困難であるという原理に基づいています。
- RSA暗号 – 鍵は2つの大きな素数から生成されます
- Diffie-Hellman – 素数モジュロ上での鍵交換
- ハッシュ関数 – 素数をマジック定数として使用(SHA, MD5)
数学と科学
- 整数論 – 整数の基本的な構成要素
- ゴールドバッハ予想 – 2より大きいすべての偶数は2つの素数の和で表せる(未だ証明されていない)
- リーマン予想 – ヒルベルトの23の問題の1つで、素数の分布に関するもの
実用的な応用
- ハッシュテーブル – テーブルサイズを素数にすることで衝突を減らす
- 擬似乱数生成器 – 素数モジュロを持つ線形合同法
- 音楽とリズム – 素数周期のポリリズム
素数の分布
素数は自然数の中に不規則に分布していますが、その密度は範囲が大きくなるにつれて減少します。これは素数定理によって記述されており、Nまでの素数の数は約 N / ln(N) です。
| 範囲 | 素数の数 |
|---|---|
| 1–10 | 4 |
| 1–100 | 25 |
| 1–1 000 | 168 |
| 1–10 000 | 1 229 |
| 1–100 000 | 9 592 |
| 1–1 000 000 | 78 498 |
エラトステネスの篩:ステップバイステップ
範囲 2–30:
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
1. 2を選択し、その倍数(4, 6, 8, 10, 12...)を消去する。
2. 3を選択し、その倍数(9, 15, 21, 27...)を消去する。
3. 5を選択し、その倍数(25...)を消去する。
4. √30 ≈ 5.5 → 完了
素数: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
コードでのエラトステネスの篩
JavaScript
function sieve(to) {
const composite = new Uint8Array(to + 1);
const primes = [];
for (let p = 2; p <= to; p++) {
if (composite[p]) continue;
primes.push(p);
for (let j = p * p; j <= to; j += p) composite[j] = 1;
}
return primes;
}
Python
def sieve(n):
composite = bytearray(n + 1)
primes = []
for p in range(2, n + 1):
if not composite[p]:
primes.append(p)
for j in range(p * p, n + 1, p):
composite[j] = 1
return primes