Pythonでナルシスト数(アームストロング数)を判定するプログラムの作成方法
ナルシスト数とは?
ナルシスト数(Narcissistic Number、別名:アームストロング数)とは、「各桁の数字を桁数乗して合計した値が、元の数そのものと一致する数」のことです。
例えば、9474 を考えてみましょう。この数は4桁なので、各桁の数字を4乗して足し合わせます。
9^4 + 4^4 + 7^4 + 4^4 = 6561 + 256 + 2401 + 256 = 9474
計算結果が元の数 9474 と一致しているため、9474 はナルシスト数であると言えます。
判定アルゴリズムの手順
この問題を解くためには、以下の手順に従います。
- 数値 n を文字列に変換し、各桁の数字をリストとして取得する
- リスト内のすべての数字 x について「x の桁数乗」を計算し、その合計を求める
- 合計が元の数 n と一致すれば True、そうでなければ False を返す
Pythonでの実装例
それでは、実際のコードを見てみましょう。
class Solution:
def solve(self, n):
s = str(n)
return n == sum(int(x) ** len(s) for x in s)
ob = Solution()
print(ob.solve(9474))
コードの解説
このプログラムのポイントは以下の通りです。
str(n)で数値を文字列に変換することで、簡単に各桁にアクセスできます。len(s)で桁数を取得します。- ジェネレータ式
sum(int(x) ** len(s) for x in s)を使うことで、各桁を桁数乗して合計する処理を1行で簡潔に記述できます。 - 最後に
n ==で比較することにより、ブール値(True / False)を直接返しています。
実行結果
入力
9474
出力
True
出力が True となり、9474 がナルシスト数であることが確認できました。
まとめ
Pythonでは、数値を文字列に変換して各桁を操作するのが定石です。今回のようにジェネレータ式を活用すれば、ナルシスト数の判定処理も非常にシンプルに実装できます。他にも 153(3桁)、1634(4桁)などがナルシスト数として知られているので、ぜひ試してみてください。
-
指定された文字列がキーワードであるかどうかを確認するPythonプログラム
この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ
-
Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法
本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて