無料オンライン素数ジェネレーター | 範囲指定・ランダム生成

クイックプリセット:
コピー時の区切り文字

素数とは?

素数とは、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–104
1–10025
1–1 000168
1–10 0001 229
1–100 0009 592
1–1 000 00078 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

よくある質問 (FAQ)

1は素数ですか? いいえ。伝統的に1は素数とは見なされません。その理由は数学的で、もし1を素数とすると、素因数分解の一意性の定理が成り立たなくなってしまうからです。
2は素数ですか? はい。2は最小であり、唯一の偶数の素数です。他のすべての偶数は2で割り切れるため、合成数です。
素数はいくつ存在しますか? 無限に存在します。ユークリッドは紀元前300年頃、背理法を用いたエレガントな証明でこれを示しました。もし素数が有限個しか存在しないと仮定すると、それらすべての素数の積に1を加えた数は、どの素数でも割り切れないため、新たな素数であることになり、矛盾が生じます。
双子素数とは何ですか? 双子素数とは、差が2である素数のペアのことです。例えば(3, 5), (11, 13), (17, 19), (41, 43)などがあります。双子素数が無限に存在するかどうかは、今日まで数学の未解決問題です(双子素数予想)。
このアルゴリズムはどれくらいの速さで動作しますか? エラトステネスの篩の時間計算量はO(n log log n)です。1,000万までの範囲では、ブラウザでの計算は通常100ミリ秒未満で完了します。