説明

素数判定方法、素数判定装置および素数判定プログラム

【課題】 所定の範囲の既知の素数のみに基づき、大きな対象数についても判定可能な素数判定方法、素数判定装置および素数判定プログラムを提供する。
【解決手段】 対象数N(Nは正の整数)が素数であるか否かを判定する素数判定方法であって、対象数Nの入力を受け付ける入力受付過程と、対象数Nを除する除数の範囲を定める範囲規定過程と、対象数Nを除数で除して、対象数Nが素数であるか否かを判定する素数判定過程と、対象数Nが素数であるか否かの結果を出力する結果出力過程と、を備え、範囲規定過程は、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとして、N1/2/Mの小数点以下を切り上げた規定数Rを算出するものであり、素数判定過程は、整数を1からM列に並べた配列において、第1行の素数およびR≧2なら第2行から第R行までの第1列およびMを構成する素数を除いた素数列の数を除数とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、対象数が素数であるか否かを判定する素数判定方法、素数判定装置および素数判定プログラムに関する。
【背景技術】
【0002】
ある正の整数(対象数N)が素数であるか否かを判定する方法として最も単純なものは、Nを2以上N未満の整数で順次割り算し、割り切れる整数がなければ素数、一つでも割り切れる整数があれば非素数とするものである。しかし、この方法は計算量が非常に多くなるため、従来、もっと少ない計算量で素数判定を行うための種々の方法が提案されている。たとえば、古くから周知の方法として「エラトステネスのふるい」があり、この方法は、対象数Nについて、Nの平方根N1/2以下のすべての素数で割り切れなければNを素数とするものである。また近年では、素数判定はコンピュータシステムにおける暗号技術とも深く関係している。たとえば特許文献1において、対象数Nの平方根N1/2以下の全ての素数が予め記憶されている素数記憶手段と、素数記憶手段内の何れの素数でも割り切れない正の整数αが予め記憶されている整数記憶手段とを用い、対象数Nと整数αとを乗算し(乗算結果m=Nα)、乗算結果mを素数記憶手段内の何れかの素数で割り算して余りrを算出し、余りrが素数記憶手段の何れの素数で割った場合も0でないとき、対象数Nを素数であると判定する素数判定方法が提案されており、これにより、素数判定時に電力解析やタイミング解析を施されても、素数候補の漏洩を阻止できる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2002−268548号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、「エラトステネスのふるい」や文献1の方法は、いずれも対象数Nの平方根N1/2以下の素数が既知であることを前提とし、予め用意された素数のリストを参照するものであり、対象数Nが大きくなると必要な素数のリストも大きくなること、逆に言えば、既知の素数の最大値の二乗の数までしか対象にできないことが問題であった。
【0005】
本発明は、上記事情を鑑みたものであり、所定の範囲の既知の素数のみに基づき、大きな対象数についても判定可能な素数判定方法、素数判定装置および素数判定プログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明のうち請求項1の発明は、対象数N(Nは正の整数)が素数であるか否かを判定する素数判定方法であって、入力受付手段が、対象数Nの入力を受け付ける入力受付過程と、範囲規定手段が、対象数Nを除する除数の範囲を定める範囲規定過程と、素数判定手段が、対象数Nを除数で除して、対象数Nが素数であるか否かを判定する素数判定過程と、結果出力手段が、対象数Nが素数であるか否かの結果を出力する結果出力過程と、を備え、前記範囲規定過程は、範囲規定手段が、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとして、N1/2/Mの小数点以下を切り上げた規定数Rを算出するものであり、前記素数判定過程は、素数判定手段が、整数を1からM列に並べた配列において、第1行の素数およびR≧2なら第2行から第R行までの第1列およびMを構成する素数を除いた素数列の数を除数とするものであることを特徴とする。
【0007】
本発明のうち請求項2の発明は、対象数N(Nは正の整数)が素数であるか否かを判定する素数判定装置であって、対象数Nの入力を受け付ける入力受付手段と、対象数Nを除する除数の範囲を定める範囲規定手段と、対象数Nを除数で除して、対象数Nが素数であるか否かを判定する素数判定手段と、対象数Nが素数であるか否かの結果を出力する結果出力手段と、を備え、前記範囲規定手段が、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとして、N1/2/Mの小数点以下を切り上げた規定数Rを算出するものであり、前記素数判定手段が、整数を1からM列に並べた配列において、第1行の素数およびR≧2なら第2行から第R行までの第1列およびMを構成する素数を除いた素数列の数を除数とするものであることを特徴とする。
【0008】
本発明のうち請求項3の発明は、対象数N(Nは正の整数)が素数であるか否かを判定する素数判定プログラムであって、対象数Nの入力を受け付ける入力受付ステップと、対象数Nを除する除数の範囲を定める範囲規定ステップと、対象数Nを除数で除して、対象数Nが素数であるか否かを判定する素数判定ステップと、対象数Nが素数であるか否かの結果を出力する結果出力ステップと、をコンピュータに実行させるためのものであって、前記範囲規定ステップが、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとして、N1/2/Mの小数点以下を切り上げた規定数Rを算出するものであり、前記素数判定ステップが、整数を1からM列に並べた配列において、第1行の素数およびR≧2なら第2行から第R行までの第1列およびMを構成する素数を除いた素数列の数を除数とするものであることを特徴とする。
【発明の効果】
【0009】
本発明によれば、配列の第1行の素数、すなわちM以下の素数さえ予め把握されていれば、対象数Nがどれだけ大きくなっても、それ以上除数としての素数を算出する必要がない。よって、巨大な整数についても、コンピュータの性能に制限されることなく、容易に素数判定を行うことができる。
【図面の簡単な説明】
【0010】
【図1】本発明の素数判定プログラムの処理の流れを示すフローチャート。
【発明を実施するための形態】
【0011】
以下、本発明の素数判定方法について、具体的に説明する。この素数判定方法は、正の整数である対象数Nに対して除数を定め、何れかの除数で割り切れた場合には非素数と判定し、何れの除数でも割り切れない場合には素数と判定するものであり、除数の規定方法に特徴がある。そこで、まず除数の規定方法の前提となる考え方について説明する。
【0012】
まず、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとする。たとえば、M=2×3=6、M=2×3×5=30、M=2×3×5×7=210である。
【0013】
次に、整数を1からM列に並べた配列を考える。以下の表1に示すのは、M=6の場合である。ここで、配列中の素数(白抜き文字で表示)の位置に注目すると、最初の二つの素数(2,3)以外の素数は、第1列および第5列に現れることがわかる。
【0014】
【表1】

【0015】
同様に、以下の表2に示すのは、M=30の場合である。ここで、配列中の素数の位置に注目すると、最初の三つの素数(2,3,5)以外の素数は、第1列、第7列、第11列、第13列、第17列、第19列、第23列、第29列に現れることがわかる。
【0016】
【表2】

【0017】
すなわち、整数を1からM列に並べた配列において、素数は、第1行に現れる最初のP個の素数を除いて、第1列および最初のP個の素数を除いた素数列に現れ、それ以外の列には現れない。以下、第1列および最初のP個の素数を除いた素数列を、出現列とよぶ。
【0018】
ここで、「エラトステネスのふるい」によれば、対象数Nについて、Nの平方根N1/2以下のすべての素数で割り切れなければNを素数と判定できるが、そのためには、除数としてN1/2以下のすべての素数が予め把握されていなければならなかった。しかし、上記の配列を考えると、出現列にはすべての素数(最初のP個を除く)が含まれている。よって、対象数Nに対して、N1/2/Mの小数点以下を切り上げた数を規定数Rとして、除数を、第1行の素数および第2行から第R行の出現列の数とすれば、その中にはN1/2以下のすべての素数が含まれていることになるので、素数判定を行うことができる。その際、配列のA行B列の値Xは、X=B+M×(A−1)で与えられるので、容易に求めることができる。なお、出現列には非素数も含まれているが、それらは必ずその数より小さい素数の倍数となっているから、素数判定に影響はない。
【0019】
このように、本発明の素数判定方法によれば、対象数Nがどれだけ大きくなっても、配列の第1行の素数、すなわちM以下の素数さえ予め把握されていれば、それ以上の除数を求めることは容易であり、従来の方法のように、除数としての素数を算出する必要がない。よって、巨大な整数についても、コンピュータの性能に制限されることなく、容易に素数判定を行うことができる。
【0020】
実際に本発明の素数判定方法を実施するには、以下に示す素数判定装置および素数判定プログラムを利用する。なお、ここではP=3(M=30)とした場合の例を示す。
【0021】
本発明の素数判定プログラムは、キーボードやマウスなどからなる入力装置、ディスプレイなどからなる出力装置、本プログラムの命令を順番に実行するCPU、本プログラム、本プログラムの実行に必要なデータおよび判定結果などを保存しておく記憶装置を構成要素とする標準的なコンピュータにより実行される。また、本発明の素数判定装置は、前記プログラムが実行されるコンピュータにより構成される。
【0022】
本プログラムをコンピュータに実行させた場合、コンピュータが各種の手段(入力受付手段、範囲規定手段、素数判定手段、結果出力手段)として機能し、CPUからの指令によって、図1に示すように、入力受付手段が入力受付ステップS1を実行し、範囲規定手段が範囲規定ステップS2を実行し、素数判定手段が素数判定ステップS3を実行し、結果出力手段が結果出力ステップS4を実行することで、素数判定を行う。なお、素数判定手段は、さらに第一判定手段および第二判定手段に細分され、それぞれ第一判定ステップS3aおよび第二判定ステップS3bを実行する。
【0023】
本プログラムを実行すると、まず入力受付手段が機能して、入力受付ステップS1が実行される。入力受付ステップS1では、記憶装置に保存されている入出力フォームを読み込んで出力装置に表示する。入出力フォームは、対象数Nを入力するための入力部と、対象数Nが素数であるか非素数であるかの判定結果を出力するための出力部とを備える。使用者は、任意の正の整数を対象数Nとして入力装置から入力する。入力値は記憶装置に保存されると共に、そのまま入力部に表示される。
【0024】
次に、範囲規定手段が機能して、範囲規定ステップS2が実行される。範囲規定ステップS2は、対象数Nを除する除数の範囲、すなわち、配列の何行目までを除数とするかを定めるものであり、入力された対象数Nおよび素数階乗数M(=30)を記憶装置から読み込み、N1/2/30の小数点以下を切り上げた規定数Rを算出する。
【0025】
次に、素数判定手段が機能して、素数判定ステップS3が実行される。素数判定ステップS3は、対象数Nを除数で除して、対象数Nが素数であるか否かを判定するものであり、第一判定ステップS3aおよび第二判定ステップS3bからなる。
【0026】
まず、素数判定手段のうち第一判定手段が機能して、第一判定ステップS3aが実行される。第一判定ステップS3aでは、まず対象数N=1であれば非素数と判定する。そして、N≠1であれば、さらに対象数Nが、30以下の素数、すなわち、2,3,5,7,11,13,17,19,23,29であれば素数と判定する。これらの数について対象数Nと直接比較して素数判定を行うのは、対象数Nとしてこれらの数を入力した場合に、これらの数で割り切れることにより非素数と判定されることを防ぐためである。素数または非素数の判定がなされた場合、判定結果は記憶装置に保存される。
【0027】
第一判定ステップS3aにおいて素数または非素数の判定がなされなければ、次に、素数判定手段のうち第二判定手段が機能して、第二判定ステップS3bが実行される。第二判定ステップS3bでは、除数を第1行の素数およびR≧2なら第2行から第R行までの出現列の数として、対象数Nが各除数で割り切れるか否かにより素数判定を行う。ここで出現列は、第1列、および30以下で最初の三個の素数を除いた素数列、すなわち、第7,11,13,17,19,23,29列となる。上述のとおり、配列のA行B列の値Xは、X=B+30×(A−1)で与えられるので、まずA=1とし、Bを2,3,5,7,11,13,17,19,23,29(1は素数ではないので、B=1は含まない)と変化させて、順次対象数Nが割り切れるか否かを計算する。何れの数でも割り切れなければ、次はA=2とし、Bを1,7,11,13,17,19,23,29(出現列に対応しており、以下においてB=2,3,5は含まない)と変化させて、順次対象数Nが割り切れるか否かを計算する。また何れの数でも割り切れなければ、Aの値を1ずつ大きくして、A=Rとなるまで同様の計算を繰り返す。そして、途中何れかの数で割り切れた場合には、その時点で計算を終了して非素数と判定し、最後まで何れの数でも割り切れない場合には素数と判定し、判定結果は記憶装置に保存される。なお、配列の各値はその都度計算で求めるものであり、記憶装置内に表2に示すような配列自体が記憶されているわけではない。
【0028】
次に、結果出力手段が機能して、結果出力ステップS4が実行される。結果出力ステップS4では、素数判定の結果を記憶装置から読み込み、その結果に応じて、出力部に「素数」または「非素数」と表示する。以上でプログラムの全ステップが終了する。
【0029】
なお、上記の素数判定装置および素数判定プログラムは、本発明の素数判定方法を実施するための一例であり、上記内容に限定されるものではない。また、本発明の素数判定プログラムは、専用のソフトウェアとして実行されるものであっても、汎用の表計算ソフトウェアなどの上で実行されるものであっても良い。
【符号の説明】
【0030】
S1 入力受付ステップ
S2 範囲規定ステップ
S3 素数判定ステップ
S4 結果出力ステップ

【特許請求の範囲】
【請求項1】
対象数N(Nは正の整数)が素数であるか否かを判定する素数判定方法であって、
入力受付手段が、対象数Nの入力を受け付ける入力受付過程と、
範囲規定手段が、対象数Nを除する除数の範囲を定める範囲規定過程と、
素数判定手段が、対象数Nを除数で除して、対象数Nが素数であるか否かを判定する素数判定過程と、
結果出力手段が、対象数Nが素数であるか否かの結果を出力する結果出力過程と、を備え、
前記範囲規定過程は、範囲規定手段が、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとして、N1/2/Mの小数点以下を切り上げた規定数Rを算出するものであり、
前記素数判定過程は、素数判定手段が、整数を1からM列に並べた配列において、第1行の素数およびR≧2なら第2行から第R行までの第1列およびMを構成する素数を除いた素数列の数を除数とするものであることを特徴とする素数判定方法。
【請求項2】
対象数N(Nは正の整数)が素数であるか否かを判定する素数判定装置であって、
対象数Nの入力を受け付ける入力受付手段と、
対象数Nを除する除数の範囲を定める範囲規定手段と、
対象数Nを除数で除して、対象数Nが素数であるか否かを判定する素数判定手段と、
対象数Nが素数であるか否かの結果を出力する結果出力手段と、を備え、
前記範囲規定手段が、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとして、N1/2/Mの小数点以下を切り上げた規定数Rを算出するものであり、
前記素数判定手段が、整数を1からM列に並べた配列において、第1行の素数およびR≧2なら第2行から第R行までの第1列およびMを構成する素数を除いた素数列の数を除数とするものであることを特徴とする素数判定装置。
【請求項3】
対象数N(Nは正の整数)が素数であるか否かを判定する素数判定プログラムであって、
対象数Nの入力を受け付ける入力受付ステップ(S1)と、
対象数Nを除する除数の範囲を定める範囲規定ステップ(S2)と、
対象数Nを除数で除して、対象数Nが素数であるか否かを判定する素数判定ステップ(S3)と、
対象数Nが素数であるか否かの結果を出力する結果出力ステップ(S4)と、をコンピュータに実行させるためのものであって、
前記範囲規定ステップ(S2)が、小さいほうからP(Pは2以上の整数)個の素数を掛け合わせた数を素数階乗数Mとして、N1/2/Mの小数点以下を切り上げた規定数Rを算出するものであり、
前記素数判定ステップ(S3)が、整数を1からM列に並べた配列において、第1行の素数およびR≧2なら第2行から第R行までの第1列およびMを構成する素数を除いた素数列の数を除数とするものであることを特徴とする素数判定プログラム。

【図1】
image rotate