C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】再帰を使って素数を判定するプログラムの作り方

整数が入力として与えられたとき、その入力値 Num が素数か非素数かを再帰(リカーション)を使って判定するのが本記事の目的です。

ある数が素数かどうかを調べるには、i = 2 から i <= Num/2 の範囲を順番に確認していきます。この範囲内のどれかの i で割り切れた場合、その数は素数ではありません。素数は 1 とその数自身でしか割り切れないためです。

入力 − Num = 32

出力 − 32 is non-Prime!(32は素数ではない)

説明i = 2 から i <= 32/2 の範囲で確認すると、最初の時点で 2 で割り切れてしまうため、素数ではないとわかります。

入力 − Num = 43

出力 − 43 is a Prime number!(43は素数)

説明i = 2 から i <= 43/2 の範囲で確認しても、2〜21 のどの数でも割り切れないため、素数であることがわかります。

プログラムで使用するアプローチ

このアプローチでは、入力された数値と、2 から num1/2 までの値を取るインデックスを受け取る再帰関数 checkPrime(int num1, int index) を使用します。

基本ケース(ベースケース)

  • num1 < 2 の場合は 0 を返します。2 未満の数は素数ではないためです。

  • num1 が 2 または 3 の場合は 1 を返します。2 と 3 は素数であるためです。

  • num1 % index == 0 の場合は 0 を返します。index で割り切れるということは素数ではないことを意味します。

  • index が num1/2 を超えた場合は 1 を返します。num1/2 までのどの数でも num1 を割り切れなかったということで、これは素数の場合にのみ起こり得ます。

再帰ケース

  • index <= num1/2 の間は、result = checkPrime(num1, index + 1) として次のインデックスで再帰的に呼び出します。

  • 最終的な result を呼び出し元に返します。

  • main 関数内で取得した結果を出力します。

処理の流れ

  • 入力として数値 Num を受け取る

  • 関数 checkPrime(int num1, int index) が引数を受け取り、素数なら 1、そうでなければ 0 を返す

  • main 関数の中で結果を判定して表示する

サンプルコード

#include <bits/stdc++.h>
using namespace std;
int checkPrime(int num1, int index){
    if(num1<2){
        return 0;
    }
    if (num1 == 2 || num1==3){
        return 1;
    }
    if (num1 % index == 0){
        return 0;
    }
    if (index >= num1/2){
        return 1;
    }
    int result=checkPrime(num1, index+1);

    return (result);
}
int main(){
    int Num = 31;
    if (checkPrime(Num,2)==1){
        cout <<Num<<" is a Prime number !";
    }
    else{
        cout <<Num<<" is non Prime!";
    }

    return 0;
}

出力

上記のコードを実行すると、次のような出力が得られます。

31 is a Prime number!

  1. C++で10進数を16進数に変換するプログラムの作り方

    10進数の数値が入力として与えられたとき、その数値を16進数に変換するのが本記事の目的です。 コンピュータの世界では、16進数は基数16で表現され、10進数は基数10で表現されます。10進数は0〜9の値を使って表されるのに対し、16進数は0〜15の数字を持ちます。そのうち10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、15は「F」として表されます。 10進数から16進数への変換手順 10進数を16進数に変換するには、以下の手順に従います。 まず、与えられた数値を変換先の基数で割ります。たとえば、6789を16進数に変換する場合、基数である16で6789を割り、商を求め

  2. C++で10進数を2進数に変換するプログラムの書き方

    コンピューターの内部では、すべてのデータが2進数(基数2)として扱われています。一方、私たちが日常的に使う10進数は「0〜9」の数字を組み合わせた基数10の記数法です。この記事では、C++を使って入力された10進数を2進数へ変換するプログラムの考え方と実装方法を解説します。10進数から2進数への変換手順10進数を2進数に変換する基本的な方法は、「2で割った余りを順番に記録していく」ものです。具体的には次の手順で行います。まず、変換したい数値を基数である2で割り、商と余りを求めます。余りが0であればその桁は「0」、1であれば「1」として記録します。続いて、得られた商をさらに2で割り、同じように余