Pythonで指定した数がディサリウム数(Disarium Number)かどうかを判定する方法
ある整数がディサリウム数(Disarium Number)であるかどうかを判定するには、各桁の数字を「その桁の位置」でべき乗し、それらを合計した値が元の数と一致するかを確認します。計算の前に、まず対象の数が何桁であるかを求めておく必要があります。
ディサリウム数とは?
ディサリウム数とは、各桁の数字をそれぞれの位置(左から1桁目は1乗、2桁目は2乗…)でべき乗した合計が、元の数そのものと等しくなる数のことです。
例えば 135 は次のように計算できます。
135 = 1¹ + 3² + 5³ = 1 + 9 + 125 = 135
このように合計が元の数と一致するため、135 はディサリウム数です。他にも 89、175、518、598 などがディサリウム数として知られています。
判定プログラムの実装例
以下は、Pythonでディサリウム数を判定するコードの実行例です。
サンプルコード
def length_calculation(num_val):
length = 0
while(num_val != 0):
length = length + 1
num_val = num_val//10
return length
my_num = 192
remaining = sum_val = 0
len_val = length_calculation(my_num)
print("元の数のコピーを作成しています...")
num_val = my_num
while(my_num > 0):
remaining = my_num%10
sum_val = sum_val + int(remaining**len_val)
my_num = my_num//10
len_val = len_val - 1
if(sum_val == num_val):
print(str(num_val) + " はディサリウム数です!")
else:
print(str(num_val) + " はディサリウム数ではありません")
実行結果
元の数のコピーを作成しています... 192 はディサリウム数ではありません
192 の場合、1¹ + 9² + 2³ = 1 + 81 + 8 = 90 となり、元の数 192 と一致しないため、ディサリウム数ではないと判定されます。
コードの解説
- length_calculation 関数: 引数として受け取った数の桁数を計算する関数です。10での整数除算(フロア除算)を繰り返すことで桁数を求め、その結果を返します。
- 変数の初期化: 判定対象の数 my_num を定義し、剰余を格納する remaining と合計を格納する sum_val を 0 で初期化します。また、先ほどの関数を使って桁数 len_val を取得します。
- 元の数の保存: ループ処理の中で my_num の値が変化するため、比較用にあらかじめ num_val としてコピーしておきます。
- 各桁の処理: whileループ内では、剰余演算(%)を使って末尾の桁を取り出し、その桁の位置(len_val)でべき乗した値を sum_val に加算していきます。その後、数を10で割って次の桁へ移動し、len_val を1減らします。
- 最終判定: ループ終了後、sum_val と元の数 num_val を比較します。両者が一致すればディサリウム数、一致しなければディサリウム数ではないと出力されます。
このアルゴリズムの計算量は桁数に依存するため、非常に効率的です。ぜひ自分の好きな数で試してみてください。
-
Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法
本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて
-
【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説
本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が