Pythonで数値の奇数桁の合計がKで割り切れるかどうかを判定する方法
この記事では、数値 n と整数 k が与えられたとき、n の奇数番目の桁(右側から左側に向かって数えた場合)の合計が k で割り切れるかどうかを判定する方法を解説します。
問題の例
例えば、入力が n = 2416、k = 5 の場合を考えてみましょう。右から左に数えて奇数番目の桁は「4」と「6」なので、その合計は 4 + 6 = 10 となります。10 は 5 で割り切れるため、出力は True になります。
解決の手順
この問題は、以下のステップで解くことができます。
- 合計値を格納する変数
totalを 0、桁位置を表す変数posを 1 で初期化します。 nが 0 より大きい間、以下の処理を繰り返します。posが奇数の場合、nの最下位桁(n mod 10)をtotalに加算します。nを 10 で割った商(整数除算)で更新します。posを 1 増やします。
- ループ終了後、
totalがkで割り切れればTrueを返し、そうでなければFalseを返します。
実装例(Pythonコード)
それでは、実際のコードを見てみましょう。
def solve(n, k):
total = 0
pos = 1
while n > 0:
if pos % 2 == 1:
total += n % 10
n = n // 10
pos += 1
if total % k == 0:
return True
return False
n = 2416
k = 5
print(solve(n, k))
入力
2416, 5
出力
True
コードのポイント
n % 10:数値の最下位桁(一の位)を取り出します。n // 10:整数除算により、最下位桁を取り除いた残りの数値を取得します。posカウンターを使用することで、右から何桁目かを追跡でき、奇数位置の桁だけを選んで合計できます。
このアルゴリズムの時間計算量は O(d) です。ここで d は数値 n の桁数を表します。非常にシンプルで効率的なアプローチです。
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
【Python】配列内のすべての桁を使って3で割り切れる数を作成できるか判定する方法
この記事では、与えられた問題文を解決するための解法とアプローチについて詳しく解説します。 問題文 整数の配列が入力として与えられたとき、これらの数値に含まれるすべての桁を使用して、3で割り切れる整数を作成できるかどうかを判定する必要があります。 ここでは、整数の配列と配列の長さという2つの引数を受け取る関数を作成します。 解法のポイント この実装は、暗算でよく使われる数学的な性質に基づいています。それは次の通りです。 「ある数の各桁の合計が3で割り切れるならば、その数自体も3で割り切れる」 この性質を利用すると、実際に桁を組み合わせて数値を生成する必要はなく、配列内の各要素について3で割った余