1

素数判定公式(なぜそうなるかの解説付き)※

197
0
$$$$

以下の式により素数か素数でないかの判定が可能です。
なぜこの式で判定できるのか、合間を見つけて少しずつ投稿していく予定
まずは計算サイトなどで様々な素数を代入してみてください。
どんな大きな素数にも確実に反応します。素数でない数も的確に返します。
ぞろ目の非素数にもしっかり反応します。
nについては10進数の数列でもよいのですが、n進数とした方が美しくなりますのでそちらを採用させていただいております。
まずは使用する記号を記します。

$$\normalsize{N_{10} } = 判定したい任意の10進数 $$
$$\normalsize{n} = \lbrace 2,3,4 \cdots \normalsize{n}\vert n \in \mathbb{N} ,n \geq 2 \rbrace で表わされる進数 $$
$$\normalsize{h} = \llcorner \sqrt{N_{10} } \lrcorner ・・・(a) $$ $$※  \llcorner \hspace{ 10pt } \lrcorner は床関数 $$
$$\normalsize{m} = \llcorner \sqrt{N_{10} -1} \lrcorner ・・・(b) $$
$$ {}^{n} P = 判定結果として返される値 $$
$$\normalsize{P} = 素数 $$以上を用いて判定公式を示します。
$${}^{n} P = (\sum_{n=2}^{h} \llcorner \frac{N_{10} -n}{n} \lrcorner )- (\sum_{n=2}^{m} \llcorner \frac{(N_{10} -1)-n}{n} \lrcorner ) ・・・(c) $$
$${}^{n} P = 0 \Rightarrow N_{10} = P $$
$${}^{n} P \geq 2 \Rightarrow N_{10} \neq P $$${}^{n} P$$=$1$\Rightarrow$$N_{10}$$=$$ \sqrt{ N_{10} } ^{2}$$\neq$$P$

上記のようになる理由

§1

$\boldsymbol{n}$進法で書かれた数を10進法にするには
$$\boldsymbol{a}を10進法の各桁の数、 \boldsymbol{k} を桁数とすれば $$ $$ a_{n} n^{k} + a_{n-1} n^{k-1} + \cdot \cdot \cdot + a_{1} n^{1} + a_{0} n^{0} $$ となる。$n^{0}$は1であるので$a_{0}$$=$0であることが
$$ \boldsymbol{n}進法で書かれた数の末尾が0になる条件である。 $$$a_{0}$$n_{0}$以外の項はすべて$\boldsymbol{n}$を因数に持つことは明らか。

$a_{0}$$n^{0}$が0になるためには
10進法で書かれた数が$\boldsymbol{n}$で割り切れればよい。
即ちこのことは$a_{0}$$n^{0}$の項を消すことで上記に記したように
10進法で書かれた数が、少なくとも$\boldsymbol{n}$を約数にもつことになる。
$\therefore$$\boldsymbol{n}$進法で書かれた末尾0の数は素数ではない。
といえる。

§2

ここからは、下記の表を参照しながら進めてゆきます。

末尾0を除外する範囲について

$$\boldsymbol{ n }進数で表わされる特定の数を N_{n} 例えば3進数で110などを N_{3} =110 と表わすとすれば $$
全ての末尾0は以下のように指定できる。
※当然のことのように思われると思うが必要な部分です。

$$ N_{n} \cdot \frac{ N_{10} }{ N_{n} } = N_{10} $$
例えば3進数で10進数の12を表している時3進数は110、この110は3進数において末尾0として4つ目に現れる数です。この個数4に3進数の3をかけることによって10進数の12が表せるということ。
いくつ目に現れる末尾0かということを$\acute{ n }$で表わすとすると(※以下、図1を参照しながら確認ください)

$$ N_{n} \cdot \acute{ n } = N_{10} $$となる、このことは10進数の12は3進数の4番目の末尾0でも表せるし、4進数の3番目の末尾0でも表せることになる(※10進数の12に関しては他にもペアが存在するがここでは割愛する)即ち合成数において{ゾロ目(:平方数のことですがこの呼び方が好きなので)以外}すべて上記のようなペアが存在する。このことを末尾0の最初の数である10に当てはめて考えてみる。10は1つ目に現れる末尾0であることは自明であるので、ペアの片方では必ず1進数が必要になってしまう。1進数において末尾0は存在しないので、ペアが構成できない。ペアができないことは合成数と確定できないことを意味する。なぜなら1×任意の進数で表わされるものは素数である要件を満たす(任意の進数が素数である場合)ことになるし、表わされるのはその進数自身であり、すべての自然数を示すことができてしまうからである。
以上の理由より末尾0のうち、最初に現れる10は除外して考えることとする。※後述で再度除外理由について言及する。

末尾0を調べればよい範囲

末尾0のうち、100は特別な数である。これはぞろ目を意味する。ここでいうぞろ目は例えば
$N_{10}$$=$$ \left( \sqrt{ N_{10} } \right) ^{2}$
となっている数のことである。
例えば$N_{10} = $49がこれに相当する。
図1 を参照いただきたい。赤く示したラインが100ラインである。先ほど末尾0のうち10は除外して考えることを示した。したがって10を除いた末尾0には図中分かり易くするために黄色で塗りつぶしてある。
見ていただければわかると思うが黄色のセルの数は各行(横の並び)
100ラインで左右に分けると、どの行も左右同数であることがわかる。
先述で、各進数10を境にペアが存在すると記した。同様に各進数100を境にペアが存在する。図1を参照していただいて。例えば$N_{10}$$=$24をみてみると100の赤いラインを境に以下の表のようになる。

2進数3進数4進数6進数8進数12進数
2個目20
3個目30
4個目40
6個目120
8個目220
12個目11000

100ラインは4進数と6進数の間に存在するので、それぞれ2進数の12個目と12進数の2個目、3進数の8個目と8進数の3個目、4進数の6個目と6進数の4個目でペアができる。結局それらはすべて10進数の24を示しているので100ラインを境に重複表示しているといえる。
進数と~個目とそれぞれの示すものは違うが、これはあくまで数字の数え方の単位のようなもの、実質やっているのは単純な掛け算であるので
$$ a_{1} \cdot b_{1} \Leftrightarrow b_{1} \cdot a_{1} $$
$a_{2}$$\cdot$$b_{2}$$\Leftrightarrow$$b_{2}$$\cdot$$a_{2}$
$$ a_{3} \cdot b_{3} \Leftrightarrow b_{3} \cdot a_{3} $$
ということである。

各進数×~個目は約数の積である。約数の積は$n^{2}$を境に重複で現れる。
もう一つ表を参照いただきたい。

abcdef
aa^2bacadaeafa
babb^2cbdbebfb
cacbcc^2dcecfc
dadbdcdd^2edfd
eaebecedee^2fe
fafbfcfdfeff^2

表中^2セルを境に同じ積がペアで表れている。
このことを具体的に$N_{10}$$=$12の約数の積でみてみよう。
{表3}

1234612
11234612
224681224
3369121836
44812162448
661218243672
121224364872144

^2のセルの並びを境に同じペアが2個づつ存在していることがわかる。

§3

この素数判定公式でやりたいことは、10進数で表わされたある数$N_{10}$が、素数かそれとも合成数かの判定である。
§2で見てきたことを踏まえて考えてゆく。
$$ N_{10}の約数として調べる必要のある最大の進数を \boldsymbol{n} とすれば $$ $\boldsymbol{n}$$\leqq$$N_{10}$
更に重複を考慮に入れると
$$ \boldsymbol{n} \leqq \llcorner \sqrt{ N_{10} } \lrcorner ・・・(1) $$
先の$N_{10}$$=$12を例にした表をご照覧あれ。
表の横軸を進数、縦軸を個数として考えると(1)によれば、
この表中$\boldsymbol{n}$$=$3まで且つ、その左側に存在する12を考慮に入れれば事足りるということになる。1進数は§2で除外したので$\boldsymbol{n}$$=$2,3のみを考慮に入れればよい。^2ラインを境に重複が生じているのでこのラインより右に約数が存在しているか否かはもはや問題ではない、なぜならその領域に約数が存在すれば必ずペアとして左側領域にも出現するからである。そして素数か合成すかを判定するにあたって、すべての約数をカウントする必要はない、なぜなら1とその数自身に一つでも約数が存在するならばそれは素数でなく合成数であると判定できるからである。

§3

§2までで、調べる範囲と除外する範囲を指定した。このセクションでは冒頭で既出の式(b)の各パーツについてその意味を示してゆく。
再度式(b)を記載する。
$$ {}^{n} P = \left( \sum_{n=2}^{h} \llcorner \frac{ N_{10} - \boldsymbol{n} }{n} \lrcorner \right) - \left( \sum_{n=2}^{m} \llcorner \frac{ \left( N_{10} -1 \right)- \boldsymbol{n} }{n} \lrcorner \right) $$
$$ \boldsymbol{h} = \llcorner \sqrt{ N_{10} } \lrcorner ・・・(Re1) $$
$\boldsymbol{m}$$=$$\llcorner$$\sqrt{ N_{10} -1}$$\lrcorner$
$\llcorner$$\lrcorner$は床関数

準備は整ったので本題に入ります。
各進数で末尾0が現れる頻度は2進数なら2個に1つ、3進数なら3個に1つである、そしてこの後の数も同じであることは自明である。
任意の10進数$N_{10}$までに任意の進数$\boldsymbol{n}$の末尾0がいくつ存在するかは、したがって
$$ \frac{ N_{10} }{n}・・・(d) $$で表わすことができる。
各進数最初の末尾0である10は§2で定めた除外範囲に該当するのでこのカウントから除外しなければならない。この操作は(d)式の分子を
$$ N_{10}- \boldsymbol{n} ・・・(e) $$と置き換えればよい。よって
$$ \frac{ N_{10}-n }{n} ・・・(f)$$
(f)式は図1でいえば任意の進数の黄色のセルの個数の縦計である。
任意の$N_{10}$について素数か否かを調べたいとき、その10進数の数において§2で示した範囲内で末尾0が存在するか否かを確認し、存在すれば素数ではないし存在しなければ素数であると判定できる。ここで確認するが、末尾0を調べることは任意の$N_{10}$の全ての因数を調べていることになる{表2}(※§2で掲示した2つ目の表)を参照。表は$N_{10}$$=$12について調べているが^2セルの斜めの並びの左側に存在する12のセルは2つあり、それぞれ3・4と2・6を示す、この4つは1と12を除けば12のすべての因数である。ここで1と12が除かれたのは重要な情報である。この因数は素数と合成数に共通したものである。そしてこれは1進法を用いた積の部分である。このことから1進法は素数と合成数に共通した表記であることがわかる、1進法を除外するべき、すなわち最初の末尾0である10を除外するべき理由は具体的にはこういうことである。※合成数であることを示すには1と自身以外に因数を持つことを示せばよい。これに必要なのは2×6と3×4の部分のみである。
さて、では§2で示した範囲内で任意の$N_{10}$までの範囲にに存在する末尾0を総計することとする。§2で指定した調べる範囲は(Re1)で示した$\boldsymbol{h }$である。$\boldsymbol{h}$は調べる必要のある$\boldsymbol{n}$の範囲の上限である。下限は2であるので式としては
$$ \sum_{n=2}^{h} \frac{ N_{10}-n }{n} ・・・(g) $$ となる。
素数は1と自身以外には約数を持たないのであるから、任意の進数での特定の数を$n_{k}とすれば$$$ $$$N_{10}$$\Longrightarrow$${}^{n} P$$\Longleftrightarrow$$n_{k}$$\neq$末尾0

少し具体的に見てゆこうと思う。図1を再度参照いただいて、任意の$N_{10}$の行を横に追ってゆくと素数の行には黄色のセルは存在しない、素数でない数の行には必ず黄色のセルが存在する、さらに言えば行のうち調べる必要のある範囲内に黄色のセルが必ず存在する。

最後の仕上げです。
(c)の等式(これが素数判定公式なのですが)の右辺第1項は説明が終わった。続いて第2項について述べるのだが、ここで素数判定公式の判定方法について述べる、なぜかといえばこれがわかれば第2項は説明さえいらない程度に容易に理解できるからである。

素数判定公式の素数判定方法について(第2項の説明も兼ねる)

任意$N_{10}$が素数であった場合、どの進数で表しても末尾0にはならない。
であるならば、(図1)のように表にした場合、素数である$N_{10}$を横軸にたどっていってもそこに末尾0は一つもないのであるから、黄色く塗りつぶしたセルは一つもないということになる。ここでは見る範囲を少なくするために$N_{10}$$=$11を判定してみる。右辺第1項で行ったのは11より上であり、ぞろ目ライン(図中赤いラインと、100のセルで表されている。100は赤く塗りつぶしたセルであるが、これは視覚的に分かり易くするためであり、末尾0ということに変わりはないので黄色のセル同様である)より左側にある2進数の100,110,1000,1010と3進数の100のセルを全て数えることであった。
11が素数であることは疑いなく、当然11の横軸に黄色のセルは一つもない、
であるならば同様の範囲の$N_{10}$$=$10までの黄色のセルの個数の合計と$N_{10}$$=$11までの黄色のセルの個数の合計は全く同じはずである。
つまり素数か否か判定したい10進数の任意の数とそのひとつ前の数の黄色のセルの個数の合計を調べ、差をとると答えが0となるものは素数であると判別できるし、0以外となるものは(その数の横軸に黄色のセルが存在するということになるので)素数でないと判定できる。更に、答えが1となるものは自身と1以外に一つしか約数を持たない数、そのような数は7×7=49や11×11=121などのぞろ目であるとわかる。
以上が素数判定公式の考え方である。
従って右辺第2項は、第1項の一つ前までの数について第1項と同じく既定の範囲内で末尾0であるセルの個数を総和したものである。
第1項と第2項の差をとることにより判定は完了する。

視覚的な解説になってしまいましたが以上が素数判定公式の考え方です。
末尾0を調べることは、すべての因数について調べることと同値であることは先にも述べましたが、すべての因数を調べ、それを内包する末尾0の総和を用いた判定法に漏れや、数が大きくなると例外が出てくるということは帰納法的な観点からないといえます。
この先馬はないぞ、あるいはこの先ジャンプが有効だ・・・←わかる人だけ(^_^

投稿日:731
更新日:89
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中