Pythonで数値が強い数(ストロングナンバー)かどうかを判定するプログラムの作成方法
強い数(Strong Number)とは?
強い数(ストロングナンバー)とは、各桁の数字の階乗の合計が元の数値と等しくなる数のことです。
例
145 1の階乗 = 1 4の階乗 = 24 5の階乗 = 120 合計 = 1 + 24 + 120 = 145
この例では、145の各桁(1、4、5)の階乗を足すと145になり、元の数値と一致するため、145は強い数であることがわかります。
以下のプログラムは、入力された数値が強い数かどうかを判定します。強い数であれば「True」を返し、そうでなければ「False」を返します。
プログラムでは2つの関数を使用しています。1つ目は数値が強い数かどうかを判定する isStrong() 関数、2つ目は引数として渡された桁の階乗を返す factorial() 関数です。
isStrong() の内部から factorial() を呼び出し、すべての桁(n % 10 で取り出した値)の階乗を計算して合計に加算していきます。
すべての桁の階乗を合計した後、その合計を元の数値と比較します。両者が一致すれば True を返し、一致しなければ False を返します。
なぜ isStrong() 内で n を num にコピーするのか? whileループを繰り返すうちに、n の値は最終的に0になってしまいます。しかし、後で合計値と比較するには元の値が必要です。そのため、n の値が変更される前に、あらかじめ別の変数 num にコピーしておく必要があるのです。
factorial() は再帰呼び出しを利用して、各桁の階乗を効率的に計算します。
サンプルコード
def factorial(d):
if(d==1 or d==0):
return 1
return d*factorial(d-1)
def isStrong(n):
num=n
sm=0
while(n>0):
digit=n%10
sm=sm+factorial(digit)
n=n//10
if(sm==num):
return True
else:
return False
print("Input a number")
a=int(input())
print(isStrong(a))実行結果
Input a number 145 True
入力として145を与えると、各桁の階乗の合計が145と一致するため「True」が出力されます。一方、強い数ではない数値を入力した場合は「False」が返されます。
-
Pythonで数値の階乗を計算するプログラム:再帰と反復の2つのアプローチを解説
本記事では、与えられた問題文に対する解決策とアプローチについて学びます。 問題の定義 問題文: n の階乗(factorial)を計算することがタスクです。 非負整数 n の階乗は、以下のように定義されます。 n! = n × (n-1) × (n-2) × (n-3) × … × 3 × 2 × 1 例えば、6 の階乗は「6! = 6 × 5 × 4 × 3 × 2 × 1 = 720」となります。また、0 の階乗は定義により 1 とみなされます。 この問題には、主に以下の2つの解法があります。 再帰的アプローチ(Recursive) 反復的アプローチ(Iterative) アプローチ1
-
【Python入門】数値が素数かどうかを判定するプログラムの書き方
この記事では、ユーザーが入力した数値(1より大きい整数)が素数かどうかを判定するPythonプログラムを紹介します。サンプルコードと実行結果、処理の流れを丁寧に解説しているので、Python初心者の方でも理解しやすい内容になっています。素数とは?素数とは、1より大きい正の整数のうち、約数が1とその数自身の2つしか存在しない数のことです。たとえば、2・3・5・7・11などは約数が1と自分自身だけであるため素数です。一方、4や6のように1と自分自身以外の約数を持つ数は「合成数」と呼ばれます。素数判定プログラムのサンプルコード# 入力された数値が素数かどうかを判定するPythonプログラム # ユ