Python
 Computer >> コンピューター >  >> プログラミング >> Python

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」が返されます。

  1. 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

  2. 【Python入門】数値が素数かどうかを判定するプログラムの書き方

    この記事では、ユーザーが入力した数値(1より大きい整数)が素数かどうかを判定するPythonプログラムを紹介します。サンプルコードと実行結果、処理の流れを丁寧に解説しているので、Python初心者の方でも理解しやすい内容になっています。素数とは?素数とは、1より大きい正の整数のうち、約数が1とその数自身の2つしか存在しない数のことです。たとえば、2・3・5・7・11などは約数が1と自分自身だけであるため素数です。一方、4や6のように1と自分自身以外の約数を持つ数は「合成数」と呼ばれます。素数判定プログラムのサンプルコード# 入力された数値が素数かどうかを判定するPythonプログラム # ユ