Pythonで指定した基数表現に0が連続して含まれるかどうかを判定する方法
プログラミングでは、ある数値を特定の基数(進法)で表したとき、その桁並びの中に「0」が連続して現れるかどうかを調べたいことがあります。本記事では、Pythonを使ってこの判定を行う方法を解説します。
実装の流れとしては、数値と基数を引数として受け取る関数を定義し、その内部で別の補助関数を呼び出すことで、条件を満たすかどうかに応じて「Yes」または「No」を出力します。
サンプルコード
def check_consecutive_zero(N, K):
my_result = convert_to_base(N, K)
if (check_n(my_result)):
print("Yes")
else:
print("No")
def convert_to_base(N, K):
weight = 1
s = 0
while (N != 0):
r = N % K
N = N // K
s = r * weight + s
weight *= 10
return s
def check_n(N):
res = False
while (N != 0):
r = N % 10
N = N // 10
if (res == True and r == 0):
return False
if (r > 0):
res = False
continue
res = True
return True
N, K = 8, 2
print("Does the number have consecutive zeroes in the base ?")
check_consecutive_zero(N, K)
実行結果
Does the number have consecutive zeroes in the base ? No
コードの解説
check_consecutive_zero:数値Nと基数Kを受け取り、判定処理全体をまとめるメインの関数です。
convert_to_base:剰余演算(%)と整数除算(//)を繰り返し適用することで、10進数の数値を指定された基数Kの表現へと変換します。
check_n:変換後の数値を1桁ずつ取り出しながら走査し、0が連続して現れているかどうかをチェックします。
判定結果に応じて、「Yes」または「No」が出力されます。
ここでは例として、N=8、K=2 を設定しています。
NとKを渡してcheck_consecutive_zero関数を呼び出し、結果をコンソールに表示します。
このように、基数変換と桁ごとの走査を組み合わせることで、任意の基数における連続ゼロの有無をシンプルなコードで判定できます。基数変換の仕組みやループによる桁操作の考え方は、他の数値処理にも応用できる基本的なテクニックです。
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで与えられたグラフが2部グラフかどうかを判定するプログラム
2部グラフとは無向グラフが与えられたとき、そのグラフが2部グラフ(バイパータイトグラフ)であるかどうかを判定する方法を解説します。2部グラフとは、グラフのすべての頂点を2つの集合 A と B に分割でき、グラフ内のすべての辺 {u, v} が必ず一方の端点 u が集合 A、もう一方の端点 v が集合 B に属するようなグラフのことです。つまり、同じ集合内の頂点同士を結ぶ辺(A-A や B-B)が一切存在しないグラフです。例として、次のようなグラフを考えてみましょう。この場合、頂点 [0, 4] を集合 A に、[1, 2, 3] を集合 B に分類できます。すべての辺は A から B、または