C++でアダム数(Adam Number)を判定する方法
アダム数(Adam Number)とは?
本記事では、与えられた整数がアダム数(Adam Number)であるかどうかを判定するC++プログラムの作成方法を解説します。まずは、アダム数とはどのような数なのかを確認しておきましょう。
アダム数とは、ある数 n の2乗と、n の各桁を逆順に並べ替えた数の2乗が、互いに逆順の関係になっている数のことです。
具体例として「13」を見てみます。13を逆順にすると「31」になります。
・13 × 13 = 169
・31 × 31 = 961
169 と 961 は互いに逆順の関係にあるため、13 はアダム数であると言えます。
アダム数の判定手順
与えられた数がアダム数かどうかは、次の手順で判定できます。
- 判定したい数 n を受け取る
- n を逆順に並べ替えた数 m を求める
- n の2乗(sq_n)を計算する
- m の2乗(sq_m)を計算する
- sq_n と「sq_m を逆順に並べ替えた値」が一致するかどうかを確認する
両者が一致すればその数はアダム数であり、一致しなければアダム数ではありません。
その他のアダム数の例
アダム数は 13 以外にも存在します。たとえば 12 もアダム数です。
・12 × 12 = 144
・21 × 21 = 441
144 を逆順にすると 441 になるため、12 も条件を満たしています。
C++での実装例
以下は、入力された数がアダム数かどうかを判定するC++プログラムの完全なソースコードです。
#include<iostream>
using namespace std;
// 数を逆順に並べ替える関数
int reverseNumber(int num) {
int res = 0;
while(num != 0) {
res = res * 10 + num % 10; // 最後の桁を取り出して結果に追加
num /= 10; // 残りの桁を詰める
}
return res;
}
// アダム数かどうかを判定する関数
bool checkAdamNumber(int num) {
int rev_num = reverseNumber(num);
// 元の数と逆順の数、それぞれの2乗を求める
int sq_num = num * num;
int sq_rev_num = rev_num * rev_num;
// 2乗同士が互いに逆順であればアダム数
if(sq_num == reverseNumber(sq_rev_num)) {
return true;
}
return false;
}
int main() {
int num;
cout << "アダム数かどうかを判定する数を入力してください:";
cin >> num;
if(checkAdamNumber(num)) {
cout << "この数はアダム数です";
} else {
cout << "この数はアダム数ではありません";
}
}
実行結果
入力として 13 を与えた場合:
アダム数かどうかを判定する数を入力してください:13
この数はアダム数です
入力として 25 を与えた場合:
アダム数かどうかを判定する数を入力してください:25
この数はアダム数ではありません
まとめ
アダム数の判定は、「数を逆順にする」「2乗を計算する」「比較する」というシンプルな処理の組み合わせで実現できます。桁を反転させる処理は、回文数の判定など他の数値演算の問題でも広く使われる基本テクニックなので、ぜひマスターしておきましょう。
-
C++で質素数(Frugal Number)を判定する方法【サンプルコード付き】
この記事では、正の整数 N が与えられたときに、その数が質素数(Frugal Number)であるかどうかを判定するプログラムを C++ で作成する方法を解説します。 質素数とは? 質素数(FRUGAL NUMBER)とは、その数自身の桁数が、素因数分解による表現の桁数よりも厳密に大きい数のことです。 例:625 の場合 625 を素因数分解すると 54 となります。 625 自身の桁数:3 桁 54 の表現の桁数:2 桁 3 は 2 よりも厳密に大きいため、625 は質素数です。 最初のいくつかの質素数:125、128、243、256、343、512、625 など 問題を理解するための具
-
C++で五胞体数(ペンタトープ数)を求める方法
五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の