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

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桁のアームストロング数として知られています。ぜひ様々な数で試してみてください。

  1. Pythonでアームストロング数を判定するプログラムの書き方

    この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す

  2. Pythonでアームストロング数を判定・生成する方法をわかりやすく解説

    3桁の整数のうち、各桁の数字を3乗した値の合計が元の数と一致するものをアームストロング数(Armstrong number)と呼びます。たとえば「153」は、1³ + 5³ + 3³ = 1 + 125 + 27 = 153 となるため、アームストロング数です。ある数がこの条件を満たすかどうかを調べるには、右端の桁から順に1桁ずつ取り出し、その3乗を累積的に加算していきます。最終的な合計が元の数と一致すれば、その数はアームストロング数であると判断できます。アームストロング数の判定プログラム以下のPythonコードは、100から999までの範囲に存在するすべてのアームストロング数を出力する例です