Pythonでアームストロング数(Armstrong Number)を判定する方法をわかりやすく解説
アームストロング数とは?
アームストロング数(Armstrong Number)とは、k桁の数 N の各桁の数字を k 乗した値の合計が、元の数 N と一致する数のことです。
例えば、153 は 3桁の数であり、各桁の 3乗の和を計算すると以下のようになります。
1³ + 5³ + 3³ = 1 + 125 + 27 = 153
合計が元の数 153 と一致するため、153 はアームストロング数です。この記事では、与えられた数がアームストロング数であれば true を、そうでなければ false を返すプログラムを Python で実装します。
解法のアルゴリズム
アームストロング数の判定は、次の手順で行うことができます。
- power に数 n の桁数を設定する
- temp に n のコピーを代入し、集計用変数 res を 0 で初期化する
- temp が 0 になるまで以下を繰り返す
- res に「temp を 10 で割った余り(下一桁)の power 乗」を加算する
- temp を 10 で整数除算して、処理済みの桁を取り除く
- ループ終了後、res が n と等しければ true、そうでなければ false を返す
Pythonでの実装例
それでは、実際のコードを見ていきましょう。
import math
class Solution(object):
def poww(self, base, power):
# 繰り返し二乗法によるべき乗計算
res = 1
while power:
if power & 1:
res *= base
base *= base
power >>= 1
return res
def isArmstrong(self, n):
power = int(math.log10(n)) + 1 # 桁数を求める
temp = n
res = 0
while temp:
res += self.poww(temp % 10, power) # 各桁のべき乗を加算
temp //= 10 # 整数除算で桁を削る
return res == n
ob1 = Solution()
print(ob1.isArmstrong(153))コードのポイント解説
1. 桁数の求め方
int(math.log10(n)) + 1 によって、数 n の桁数を効率的に取得しています。log10 を使うことで、文字列に変換せずに桁数を計算できます。
2. poww メソッド(繰り返し二乗法)
poww は繰り返し二乗法(バイナリ累乗)を使ったべき乗計算の実装です。ビットシフト(>>= 1)とビットAND(& 1) を活用することで、通常のべき乗計算よりも高速に O(log n) で結果を求められます。なお、Python では組み込み関数 pow() や演算子 ** を使っても同じ結果が得られます。
3. 各桁の抽出と集計
temp % 10 で下一桁を取り出し、その桁の power 乗を res に加算します。その後 temp //= 10(整数除算)で下一桁を除去し、これを全桁分繰り返します。
実行結果
入力
153
出力
true
153 は「1³ + 5³ + 3³ = 153」となり各桁のべき乗の和が元の数と一致するため、正しく true が出力されました。
まとめ
アームストロング数の判定は、「桁数を求める → 各桁のべき乗を合計する → 元の数と比較する」というシンプルな流れで実装できます。他にも 370(3³+7³+0³=370)、371、407 などが 3桁のアームストロング数として知られています。ぜひ様々な数で試してみてください。
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す
-
Pythonでアームストロング数を判定・生成する方法をわかりやすく解説
3桁の整数のうち、各桁の数字を3乗した値の合計が元の数と一致するものをアームストロング数(Armstrong number)と呼びます。たとえば「153」は、1³ + 5³ + 3³ = 1 + 125 + 27 = 153 となるため、アームストロング数です。ある数がこの条件を満たすかどうかを調べるには、右端の桁から順に1桁ずつ取り出し、その3乗を累積的に加算していきます。最終的な合計が元の数と一致すれば、その数はアームストロング数であると判断できます。アームストロング数の判定プログラム以下のPythonコードは、100から999までの範囲に存在するすべてのアームストロング数を出力する例です