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

Pythonで数値のすべての桁がその数自身を割り切るかどうかを判定する方法

はじめに

この記事では、与えられた問題に対する解法とアプローチについて学びます。具体的には、「ある整数のすべての桁が、その整数自身を割り切るかどうか」をPythonで判定する方法を解説します。

問題文

問題: 数値 n が与えられたとき、n のすべての桁が n を割り切るかどうかを判定してください。

考慮すべきポイント

まず、入力された数値に 0 が含まれていないかを確認する必要があります。0 で割ろうとするとゼロ除算例外(ZeroDivisionError)が発生するため、0 が含まれる場合は答えとして「No」を返さなければなりません。

それ以外の場合は、一時変数 flag を用いて判定条件を宣言し、すべての桁がその数を割り切れるかどうかを順番にチェックしていきます。

実装例

n = int(input())
flag = 1
for i in str(n):
    if int(i) == 0 or n % int(i) != 0:
        flag = 0
        break

if flag == 1:
    print("Yes")
else:
    print("No")

出力

Yes(22)

コードの解説

処理の流れを順番に見ていきましょう。

  1. 標準入力から整数 n を受け取ります。
  2. 判定用のフラグ変数 flag を 1(真)で初期化します。
  3. 数値を文字列に変換し、for ループで各桁を1つずつ取り出します。
  4. ある桁が 0 である、または n をその桁で割った余りが 0 でない場合、flag を 0 に設定してループを中断します。
  5. 最終的な flag の値に応じて「Yes」または「No」を出力します。

下の画像に示すように、すべての変数はグローバルスコープで宣言されています。

Pythonで数値のすべての桁がその数自身を割り切るかどうかを判定する方法

より簡潔な書き方:all() 関数を活用

Pythonの組み込み関数 all() を使うと、同じ処理をより簡潔に記述できます。

n = int(input())
result = all(int(i) != 0 and n % int(i) == 0 for i in str(n))
print("Yes" if result else "No")

all() はイテラブル内のすべての要素が真である場合に True を返すため、条件式を1行で表現できます。また、途中で条件を満たさない桁が見つかった時点で評価を打ち切るため、効率的でもあります。

計算量

このアルゴリズムの時間計算量は O(d) です。ここで d は数値 n の桁数を表します。各桁を一度だけ走査すればよいため、非常に効率的な解法と言えます。

まとめ

この記事では、数値のすべての桁がその数自身を割り切るかどうかを判定するアプローチについて学びました。ゼロ除算への対処、フラグ変数による判定、そして all() 関数を使った簡潔な実装方法までを押さえておくと、同様の桁操作の問題にも応用できます。

  1. Pythonでn番目のカタラン数を計算するプログラム|再帰法と動的計画法

    本記事では、n番目のカタラン数を計算する方法について解説します。 カタラン数(Catalan number)は、次の漸化式で定義される自然数の数列です。 $$C_{0}= 1,\quad C_{n+1}=\displaystyle\sum\limits_{i=0}^n C_{i}C_{n-i}\quad (n \geq 0)$$ n = 0, 1, 2, 3, … に対するカタラン数は、1, 1, 2, 5, 14, 42, 132, 429, … と続きます。 カタラン数は、再帰法と動的計画法のどちらのアプローチでも求めることができます。それでは、それぞれの実装方法を見ていきましょう。 方法

  2. 【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説

    本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が