Pythonで2つの数値を連結した数が完全平方数かどうか判定する方法
Pythonでは、2つの数値 x と y を文字列として連結し、その結果得られる数値が完全平方数(ある整数の2乗と一致する数)であるかどうかを簡単に判定できます。
例えば、入力が x = 2、y = 89 の場合、連結後の数値は 289 となり、これは 17² に等しいため、結果は True となります。
解決の手順
- x を文字列に変換して
first_numに代入する - y を文字列に変換して
second_numに代入する first_numとsecond_numを連結し、整数に変換したものをres_numに代入するres_numの平方根の整数部分をsqrt_valに代入するsqrt_val * sqrt_valがres_numと一致すればTrueを返す- 一致しなければ
Falseを返す
サンプルコード
from math import sqrt
def solve(x, y):
first_num = str(x)
second_num = str(y)
res_num = int(first_num + second_num)
sqrt_val = int(sqrt(res_num))
if sqrt_val * sqrt_val == res_num:
return True
return False
x = 2
y = 89
print(solve(x, y))入力
2, 89
出力
True
補足:浮動小数点誤差への注意
math.sqrt() は浮動小数点演算のため、非常に大きな数値では誤差が生じる可能性があります。より厳密に判定したい場合は、math.isqrt()(整数の平方根を正確に計算する関数)を使う方法もおすすめです。
from math import isqrt
def solve(x, y):
res_num = int(str(x) + str(y))
sqrt_val = isqrt(res_num)
return sqrt_val * sqrt_val == res_numこのように、数値を一度文字列に変換して連結し、再び整数へ戻すというシンプルなアプローチで、連結数が完全平方数かどうかを効率的に判定できます。
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで左右の部分木の入れ替えにより2つの二分木を一致させられるか判定する方法
問題の概要 2つの二分木が与えられたとき、任意のノードについて左部分木と右部分木を何度でも入れ替えてよいと仮定します。この操作を繰り返すことで、1つ目の木を2つ目の木とまったく同じ形に変換できるかどうかを判定するのが、この記事で扱う問題です。 例えば、次のような2つの木が入力として与えられた場合、左右の入れ替えによって一致させられるため、出力は True になります。 解決のアプローチ この問題は、幅優先探索(BFS)の考え方を使い、木をレベル(深さ)ごとに処理しながらノードの値を比較することで解けます。左右の入れ替えによって同じレベル内の値の並び順は反転し得るため、「順方向」または「逆方