Pythonでキース数(Keith数)を判定する方法をわかりやすく解説
Pythonでは、シンプルな関数を定義するだけで、ある数がキース数(Keith number)であるかどうかを簡単に判定できます。まずは、キース数とはどのような数なのかをおさらいしておきましょう。
キース数とは?
キース数(別名:レピフィジット数)とは、その数の各桁の数字から始まる数列を作り、「直前の桁数分の項の和」を次々と計算していったとき、最終的に元の数自身に到達するような自然数のことです。
例えば 14 はキース数です。その理由は以下の通りです。
- 初期の数列:1, 4
- 1 + 4 = 5
- 4 + 5 = 9
- 5 + 9 = 14 ← 元の数に到達!
キース数を判定するPythonコード
以下のコードを使うと、ある数がキース数かどうかを判定できます。
def is_keith_number(n):
# まずすべての桁を配列として取得し、その合計を求める
c = str(n)
a = list(map(int, c))
b = sum(a)
# 数がキース数かどうかをチェックする
# 例えば、14がキース数である理由は以下の通り:
# 1+4 = 5
# 4+5 = 9
# 5+9 = 14
while b < n:
a = a[1:] + [b]
b = sum(a)
return (b == n) & (len(c) > 1)
print(is_keith_number(14))
実行結果
上記のコードを実行すると、次の出力が得られます。
True
コードの仕組みを解説
- 桁への分解: 数値を文字列に変換し、
map(int, ...)を使って各桁を整数のリストにします。 - 初期の和の計算: 各桁の合計を求めます。
- 数列の更新: 合計が元の数より小さい間、リストの先頭の要素を削除し、代わりに現在の合計を末尾に追加していきます。これは「スライディングウィンドウ」のような処理です。
- 最終判定: ループ終了時の合計が元の数と一致し、かつ対象の数が2桁以上であれば
Trueを返します。
この方法なら、whileループを活用して効率よくキース数を判定できます。19、28、47、61、75 などもキース数として知られているので、ぜひ自分でも試してみてください。
-
Pythonのscikit-learnを使って画像の輪郭を検出する方法
scikit-learn(通称:sklearn)は、機械学習アルゴリズムを実装するために使用されるPythonのライブラリです。オープンソースとして公開されているため、無料で利用できます。このライブラリは、NumPy・SciPy・Matplotlibという3つのライブラリを基盤として構築されています。画像から輪郭を抽出する際には、「マーチングスクエア法(marching squares)」と呼ばれる手法が用いられます。具体的には、skimageライブラリのmeasureモジュールに含まれる「find_contours」関数を使用します。この関数では、配列内の値が線形補間されるため、出力画像にお
-
Pythonでファイルを検索する方法|os.walkによるディレクトリ走査の基本
Pythonで特定のディレクトリの中から目的のファイルを探したい場合、標準ライブラリの os.walk を使ってディレクトリツリーを再帰的に走査するのが定番の方法です。サブフォルダも含めてすべてのファイルを自動的にチェックできるため、階層が深いフォルダ構成でも柔軟に対応できます。os.walkを使ったファイル検索の実装例import os def find_file(file_name, directory_name): files_found = [] for path, subdirs, files in os.walk(directory_name):