LoginSignup
0
0

More than 3 years have passed since last update.

素数を求める

Posted at

コード

既出とは思いますが、自分でも考えて作ってみたので備忘録として残しておきます。

primenumber.cpp
#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文を用いた判定に利用できます。

終わりに

以上で、「素数を求める」プログラムの解説を終わります。
もっと効率の良い、素早い計算のできるコードがあるかもしれません。
そういう点も勉強していかないとダメですね...。

閲覧ありがとうございました。
何か間違いがあればコメントお願い致します。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0