Pythonで数値のすべての桁がその数を割り切れるかどうかを判定する方法
ある数値 n が与えられたとき、その数を構成するすべての桁が n を割り切れるかどうかを判定する問題を考えてみましょう。
例えば、入力が n = 135 の場合、出力は True になります。これは以下のように、すべての桁で割り切れるためです。
- 135 ÷ 1 = 135
- 135 ÷ 3 = 45
- 135 ÷ 5 = 27
解決のためのアプローチ
この問題は、次の手順で解くことができます。
- 変数
valにnの値を代入します。 valが 0 より大きい間、以下を繰り返します。dにvalを 10 で割った余り(つまり一番下の桁)を代入します。nがdで割り切れない場合はFalseを返します。valを 10 で整数除算して、次の桁へ移ります。
- すべての桁で割り切れた場合は
Trueを返します。
なお、桁に 0 が含まれている場合はゼロ除算になるため、割り切れるかどうかの判定関数内で d != 0 のチェックを行っている点にも注目してください。
実装例
それでは、実際のPythonコードを見てみましょう。
def is_divisible(n, d):
return d != 0 and n % d == 0
def solve(n):
val = n
while val > 0:
d = val % 10
if not is_divisible(n, d):
return False
val = val // 10
return True
n = 135
print(solve(n))入力
135
出力
True
コードの解説
このアルゴリズムのポイントは以下の2点です。
- 桁の取り出し:
val % 10によって最下位の桁を取得し、val // 10によってその桁を取り除きます。これを繰り返すことで、下の桁から順にすべての桁を調べることができます。 - ゼロ除算への対応: 数値に 0 の桁が含まれている場合、そのまま除算するとエラーになるため、
is_divisible関数ではd != 0を先にチェックしています。
計算量は数値の桁数に比例するため、時間計算量は O(log₁₀ n)、空間計算量は O(1) となり、非常に効率的です。
-
【Python】配列内のすべての桁を使って3で割り切れる数を作成できるか判定する方法
この記事では、与えられた問題文を解決するための解法とアプローチについて詳しく解説します。 問題文 整数の配列が入力として与えられたとき、これらの数値に含まれるすべての桁を使用して、3で割り切れる整数を作成できるかどうかを判定する必要があります。 ここでは、整数の配列と配列の長さという2つの引数を受け取る関数を作成します。 解法のポイント この実装は、暗算でよく使われる数学的な性質に基づいています。それは次の通りです。 「ある数の各桁の合計が3で割り切れるならば、その数自体も3で割り切れる」 この性質を利用すると、実際に桁を組み合わせて数値を生成する必要はなく、配列内の各要素について3で割った余
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す