素数とは?どんなときに確認するか
素数とは、1と自分自身でしか割り切れない1より大きい自然数のことです。7は1と7でしか割り切れないので素数、8は1、2、4、8で割り切れるので素数ではありません。 1より大きい自然数のうち素数でないものを合成数と呼びます。約数・倍数の宿題、ハッシュ表のサイズや剰余の選び方、暦や周期のパズル、素数判定アルゴリズムの練習などでよく必要になります。 このツールは、1つの数が素数かどうか、合成数なら素因数分解、そして10,000以下の素数の一覧を調べられます。
判定の仕組み: 平方根まで割ればよい
nが合成数なら、n = a × b(1 < a ≤ b)と書けます。aはb以下なので a² ≤ n、つまり a ≤ √n です。 したがって合成数には、√n以下に必ず1以外の約数があります。2から√nまで割ってみて割り切れる数がなければ、nは素数と結論できます。 このツールはさらに絞り込み、先に2を調べてから、3、5、7、…と奇数だけで割ります。偶数は2の確認ですでに除外されているためです。
素数判定: 2 ≤ d ≤ √n のどのdもnの約数でなければ素数
方法は単純な試し割りです。BigIntやミラー・ラビン法のような確率的な判定は使っていません。通常のJavaScriptの数値で計算するため、 正確に扱える整数は2^53 − 1(約9,000兆)までで、このツールが受け付けるのは10^15(1,000兆)以下の整数です。10^15付近の素数という最悪の場合でも割り算は約1,600万回で、 デスクトップPCで試したところ約0.1秒でしたが、速度は端末によって変わります。一覧の作成は、指定した数までの各数に同じ判定を行います。 範囲が大きいときは、素数の倍数を順に消していく「エラトステネスの篩」のほうがずっと速く、下の表はビルド時にこの方法で100万まで計算した値です。
100未満の素数 25個
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
1,000以下の素数には、差が2の双子素数(3と5、5と7、11と13など)が35組あります。一方で、隣り合う素数の間隔が広がる区間もあります。 次の表は、間隔の最大記録が6、8、14以上に初めて更新される箇所です。各行に、その素数と次の素数を示します。
| 連続する素数の間隔(記録更新) | 初めて現れる素数の組 |
|---|---|
| 6 | 23 と 29 |
| 8 | 89 と 97 |
| 14 | 113 と 127 |
| 18 | 523 と 541 |
| 20 | 887 と 907 |
| 22 | 1,129 と 1,151 |
| 34 | 1,327 と 1,361 |
| 36 | 9,551 と 9,587 |
| 44 | 15,683 と 15,727 |
| 52 | 19,609 と 19,661 |
| 72 | 31,397 と 31,469 |
| 86 | 155,921 と 156,007 |
| 96 | 360,653 と 360,749 |
| 112 | 370,261 と 370,373 |
| 114 | 492,113 と 492,227 |
素数はどれくらいあるか: π(x)の参考表
x以下の素数の個数をπ(x)と書きます。素数定理によると、xが大きくなるほどπ(x)はx / ln xに近づきます。下の表は実際の個数と近似値の比較です。
| x | 実際の素数の個数 π(x) | x / ln x | 比(実際 ÷ 近似) | 素数の割合 |
|---|---|---|---|---|
| 10 | 4 | 4 | 0.921 | 40.00% |
| 100 | 25 | 22 | 1.151 | 25.00% |
| 1,000 | 168 | 145 | 1.161 | 16.80% |
| 10,000 | 1,229 | 1,086 | 1.132 | 12.29% |
| 100,000 | 9,592 | 8,686 | 1.104 | 9.59% |
| 1,000,000 | 78,498 | 72,382 | 1.084 | 7.85% |
10,000までの素数は1,229個なので、このツールの一覧機能が表示する最大数も1,229個です。素数は大きくなるほどまばらになりますが、無限に存在します(ユークリッドが証明)。
検算した例
例1. 97。√97 ≈ 9.85 なので、3、5、7、9で割れば十分です。どれでも割り切れないため、97は素数です。
例2. 91。素数と間違えやすい数です。3や5では割れませんが、7で割ると13になり、91 = 7 × 13。合成数です。
例3. 360の素因数分解。2^3 × 3^2 × 5。合成数は素数の積として(順序を除き)ただ一通りに表せるという、算術の基本定理を確かめる例です。
例4. 2^31 − 1 = 2,147,483,647。メルセンヌ数と呼ばれるこの数は素数です。判定には√n ≈ 46,340までの奇数23,169個で割れば十分です。 20億を超える数でも、約2万3千回の割り算で判定できます。
よくある誤解と限界
- 1は素数ではありません。定義が「1より大きい自然数」だからです。1を素数にすると素因数分解が一通りでなくなります(6 = 2×3 = 1×2×3…)。
- 2は唯一の偶数の素数です。ほかの偶数はすべて2で割れる合成数です。
- 一の位だけで判断しないでください。1、3、7、9で終わっても合成数のことがあります(91、119、143など)。
- 素数がすべて奇数というわけではありません。2があるので「素数は奇数」は誤りです。
- 非常に大きな数には対応していません。10^15までの整数を試し割りで判定します。数百桁の素数の判定や暗号用の素数の生成はできません。
- 素数の一覧は10,000までです。それより大きい範囲は動作を軽くするため制限しています。
- 小数や負の数は受け付けません。1以上の整数のみ入力できます。
結果の活用方法
合成数と判定されたら、表示される素因数分解から約数の個数(各指数に1を足して掛ける)や最大公約数・最小公倍数を求められます。たとえば360 = 2³×3²×5 の約数の個数は (3+1)(2+1)(1+1) = 24個です。 プログラミングでは、ハッシュ表のサイズや簡易な乱数生成器の法に素数を使うことがあります。余りのパターンが繰り返されにくくなるためです。 暗号分野では、大きな素数2つの積を素因数分解するのが難しいという性質を使ったRSA暗号が有名ですが、実際に使われる素数は数百桁と、このツールの範囲をはるかに超えています。このツールで鍵を作ることはできません。
よくある質問
1はなぜ素数ではないのですか?
素数の定義が「1より大きい自然数で、約数が1と自分自身だけの数」だからです。1は素数にも合成数にも分類されません。素因数分解の一意性を保つための約束でもあります。
素数の一覧はいくつまで作れますか?
ブラウザで軽く動くように10,000までに制限しています。この範囲の素数は1,229個です。それより大きな範囲の個数は、上のπ(x)の表を参考にしてください。
なぜ平方根まで割ればよいのですか?
合成数は2つの約数の積で表され、そのうち小さいほうは必ず平方根以下になるからです。平方根以下に約数がなければ、大きいほうの約数も存在しません。
双子素数とは何ですか?
差が2の素数の組(3と5、11と13、17と19など)です。双子素数が無限にあるかどうかは、まだ証明されていない未解決問題として知られています。
大きすぎる数だと表示されるのはなぜですか?
JavaScriptが誤差なく表せる整数は9,007,199,254,740,991(2^53 − 1)までで、動作の軽さも考えてこのツールは10^15以下の整数に限定しています。それより大きい数には専用の数学ソフトを使ってください。