コード
既出とは思いますが、自分でも考えて作ってみたので備忘録として残しておきます。
#include<iostream>
using std::cin; using std::cout; using std::endl;
bool primeNumber(int n)
{
if ( n < 2 )
return false;
else if ( n == 2 )
return true;
else if ( n % 2 ==0 )
return false;
else
{
int i=0;
for ( i = 3 ; i < n ; i+=2){
if( n % i ==0 )
return false;
}
return true;
}
}
int main()
{
int num;
cout<<"Input Num. -->";
cin>> num;
if(primeNumber(num))
cout<<"This is primenumber."<<endl;
else
cout<<"This is not primenumber."<<endl;
return 0;
}
説明
今回はすべてをmain関数内で処理するのではなく、素数かどうかを判定するbool型関数を作成してみました。
primeNumber関数
この関数を用いて、入力された値が素数かどうかを判定します。
素数となる条件は、「2以上の数字」かつ「1と自分自身でしか割り切ることができない」というものです。(例えば、5,7,11,13...など)
素数でない値ならば false, 素数の値ならば true を返すようにします。
if ( n < 2 )
return false;
else if ( n == 2 )
return true;
else if ( n % 2 ==0 )
return false;
初めは単純な処理です。
2より小さい値は素数ではない、2は素数、2の倍数は必ず2で割り切れるので素数ではない、といった具合です。
ここで、先に入力された値が2かどうかの判定を行うことで、2の倍数かどうかの判定のときに、
その値が2であったとしても誤ってfalseを返さないようにしておきます。
では次に、3以上の奇数の判定にいきましょう。
else
{
int i=0;
for ( i = 3 ; i < n ; i+=2){
if( n % i ==0 )
return false;
}
return true;
}
for文を使います。(おそらくもっといい方法があると思います...)
3以上の奇数を判定していくので、ループのはじめの値は i=3
、増分はi+=2
としています。
もし入力された値が、自分より小さい値で割り切ることができたら、falseを返します。
(素数ではないということ)
例えば、n=9 であるとします。9は3で割り切ることができる、つまり素数ではないのでfalseを返します。
そして、ループの中で一度も割り切ることができなかったら、素数であると判断できるので、ループ後にtrueを返します。
main関数
main関数では、上記のprimeNumber関数を利用します。
if(primeNumber(num))
cout<<"This is primenumber."<<endl;
else
cout<<"This is not primenumber."<<endl;
primeNumber関数はbool型なので、if文を用いた判定に利用できます。
終わりに
以上で、「素数を求める」プログラムの解説を終わります。
もっと効率の良い、素早い計算のできるコードがあるかもしれません。
そういう点も勉強していかないとダメですね...。
閲覧ありがとうございました。
何か間違いがあればコメントお願い致します。