1から100までのハッピー数をすべて出力するPythonプログラム
1から100までのすべてのハッピー数(happy number)を出力するには、シンプルなループと「%」(剰余)、「+」(加算)、「//」(整数除算)といった基本的な演算子を使用します。
ハッピー数とは、ある整数の各桁の数字をそれぞれ2乗し、その合計を求める操作を繰り返したとき、最終的に1に到達する数のことです。逆に、永遠に1にならず同じ数の循環を繰り返す数は「不幸せな数」と呼ばれます。
指定された範囲内のハッピー数を出力するには、単純なループ構造を利用するだけで実現できます。
以下に具体的な実装例を示します。
コード例
def check_happy_num(my_num):
remaining = sum_val = 0
while(my_num > 0):
remaining = my_num%10
sum_val = sum_val + (remaining*remaining)
my_num = my_num//10
return sum_val
print("The list of happy numbers between 1 and 100 are : ")
for i in range(1, 101):
my_result = i
while(my_result != 1 and my_result != 4):
my_result = check_happy_num(my_result)
if(my_result == 1):
print(i)出力結果
The list of happy numbers between 1 and 100 are : 1 7 10 13 19 23 28 31 32 44 49 68 70 79 82 86 91 94 97 100
コードの解説
- まず、「check_happy_num」という名前の関数を定義し、数値を引数として受け取ります。
- whileループ内で、数値が0より大きい間だけ処理を繰り返します。
- 合計を格納する変数「sum_val」は0で初期化されます。
- 「%」演算子を使って数値を10で割った余り(つまり一番下の桁)を取り出し、変数に代入します。
- 取り出した桁の数字を2乗し、「sum_val」に加算していきます。
- 次に「//」演算子で10による整数除算を行い、処理済みの桁を取り除きます。
- この一連の処理を数値のすべての桁に対して実行し、最終的な合計値を戻り値として返します。
- メインの処理では、range(1, 101)により1から100までの範囲を定義し、各数値を順番に走査します。
- 各数値に対して、先ほど定義した「check_happy_num」関数を繰り返し呼び出します。
- 内部のwhileループでは、結果が「1」または「4」になるまで計算を続けます。これは、不幸せな数は必ず4に到達して循環に入るため、4になった時点で判定を打ち切ることで無限ループを防止しているからです。
- 最終的な結果が1であれば、その数はハッピー数であるため、コンソールに出力されます。
このように、桁ごとの2乗和を繰り返し計算するというシンプルなアルゴリズムだけで、ハッピー数を効率的に判定できます。
-
指定した範囲内のすべての素数を出力するPythonプログラム
この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 ある区間が与えられたとき、その範囲内に含まれるすべての素数を求めて出力する必要があります。 ここでは、素数の基本的な定義に基づいた全探索(ブルートフォース)によるアプローチを紹介します。素数とは、「1とその数自身のみを約数として持ち、それ以外の数を約数に持たない自然数」のことです。 この定義に基づき、各数値が素数の条件を満たしているかどうかを判定し、条件が真(True)と評価されるたびに出力処理を行います。 それでは、実際の実装例を見ていきましょう。 実装例 start = 1 end = 37 for val in
-
Pythonで与えられた数の素因数をすべて効率的に出力するプログラムの作成方法
本記事では、与えられた整数の素因数(そいんすう)をすべて効率的に求めて出力するPythonプログラムについて詳しく解説します。 問題文 ある整数 n が与えられたとき、その数を構成するすべての素因数を見つけて出力することです。 例えば 200 の場合、200 = 2 × 2 × 2 × 5 × 5 と分解できるため、出力は「2, 2, 2, 5, 5」となります。 効率的なアプローチとは 2からnまですべての数で割り切れるかを順番に確認する素朴な方法では、計算量が O(n) かかり非効率です。そこで、次の3つの性質を利用することで、計算量を O(√n) まで削減できます。 まず2で割れるだけ