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