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

Pythonで1から100までのディザリウム数(Disarium数)をすべて出力するプログラム


本記事では、Pythonを使用して1から100までの範囲にあるすべてのディザリウム数(Disarium number)を出力する方法を解説します。1から100までの間でループ処理を行い、それぞれの数値について桁数を求め、各桁の数字をその位置でべき乗した値を合計することで判定できます。

合計が元の数値と一致した場合、その数はディザリウム数とみなされます。

ディザリウム数とは

ディザリウム数とは、各桁の数字をそれぞれの桁の位置(先頭の桁を1番目とする)でべき乗し、それらを合計した結果が元の数値そのものと等しくなる数のことです。

例えば 89 はディザリウム数です。
81 + 92 = 8 + 81 = 89 となるためです。

以下に実際の実装例を示します。

サンプルコード

def length_calculation(my_val):
    len_val = 0
    while(my_val != 0):
        len_val = len_val + 1
        my_val = my_val//10
    return len_val

def digit_sum(my_num):
    remaining = sum_val = 0
    len_fun = length_calculation(my_num)
    while(my_num > 0):
        remaining = my_num%10
        sum_val = sum_val + (remaining**len_fun)
        my_num = my_num//10
        len_fun = len_fun - 1
    return sum_val

ini_result = 0
print("1から100までのディザリウム数は : ")
for i in range(1, 101):
    ini_result = digit_sum(i)
    if(ini_result == i):
        print(i)

実行結果

1から100までのディザリウム数は :
1
2
3
4
5
6
7
8
9
89

コードの解説

  • length_calculation():引数として受け取った数値を10で繰り返し整数除算し、桁数をカウントして返す関数です。
  • digit_sum():各桁の数字を取り出し、その位置(桁数)でべき乗した値を合計して返す関数です。下の桁から順に処理しながら、位置を表す変数を1ずつ減らしていきます。
  • 初期結果を格納する変数 ini_result を0で初期化します。
  • range(1, 101) により、1から100まで(101は含まない)の数値に対してループを実行し、digit_sum() の戻り値が元の数値と一致する場合、その数をディザリウム数として出力します。
  • 結果はコンソールに表示されます。1〜100の範囲では、1から9までの一桁の数と89が該当します。
  1. Pythonで与えられた数の素因数をすべて効率的に出力するプログラムの作成方法

    本記事では、与えられた整数の素因数(そいんすう)をすべて効率的に求めて出力するPythonプログラムについて詳しく解説します。 問題文 ある整数 n が与えられたとき、その数を構成するすべての素因数を見つけて出力することです。 例えば 200 の場合、200 = 2 × 2 × 2 × 5 × 5 と分解できるため、出力は「2, 2, 2, 5, 5」となります。 効率的なアプローチとは 2からnまですべての数で割り切れるかを順番に確認する素朴な方法では、計算量が O(n) かかり非効率です。そこで、次の3つの性質を利用することで、計算量を O(√n) まで削減できます。 まず2で割れるだけ

  2. 指定された文字列のすべての順列を出力するPythonプログラム

    本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +