Pythonで数がストロングナンバー(強い数)かどうかを判定するプログラム
ストロングナンバーとは?
ストロングナンバー(強い数)とは、各桁の数字の階乗の合計が、その数そのものと等しくなる数のことです。
ここでいう「階乗」とは、ある数以下のすべての正の整数を掛け合わせた値を指し、記号「!」で表されます。例えば、5の階乗は次のように計算します。
5! = 5 × 4 × 3 × 2 × 1 = 120
ある数がストロングナンバーかどうかを判定するには、剰余演算子(%)を使って各桁の数字を取り出し、whileループで階乗を求めていくのが一般的な方法です。
サンプルコード
以下に、実際の実装例を示します。
my_sum = 0
my_num = 296
print("The number is")
print(my_num)
temp = my_num
while(my_num):
i = 1
fact = 1
remainder = my_num % 10
while(i <= remainder):
fact = fact * i
i = i + 1
my_sum = my_sum + fact
my_num = my_num // 10
if(my_sum == temp):
print("The number is a strong number")
else:
print("The number is not a strong number")実行結果
The number is 296 The number is not a strong number
この例では、296の各桁(2、9、6)の階乗を計算すると、2! + 9! + 6! = 2 + 362880 + 720 = 363602となり、元の数296と一致しないため、「ストロングナンバーではない」という結果が出力されます。
コードの解説
まず、合計を格納する変数
my_sumを0で初期化します。判定対象となる数を定義し、コンソールに表示します。
後で比較できるよう、元の数を一時変数
tempに保存しておきます。外側のwhileループでは、剰余演算子(%)を使って最下位の桁(余り)を取り出します。
内側のwhileループで、取り出した桁の値以下になるまで反復処理を行い、階乗を計算します。
各反復ごとに、変数
factにカウンタiを掛けていき、カウンタを1ずつ増やします。計算した階乗の値を
my_sumに加算します。整数除算(//)で数を10分の1にして、次の桁へ処理を進めます。
すべての桁の処理が終わったら、合計値と一時変数
tempの値を比較し、一致していればストロングナンバーと判定します。
まとめ
このように、剰余演算子とwhileループを組み合わせることで、各桁の階乗を効率的に計算し、ストロングナンバーの判定を行うことができます。例えば、1、2、145、40585などは実際にストロングナンバーとして知られています。ぜひ、さまざまな数値で試してみてください。
-
Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法
本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて
-
【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説
本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が