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

Pythonで2つの数値を連結した数が完全平方数かどうか判定する方法

Pythonでは、2つの数値 xy を文字列として連結し、その結果得られる数値が完全平方数(ある整数の2乗と一致する数)であるかどうかを簡単に判定できます。

例えば、入力が x = 2y = 89 の場合、連結後の数値は 289 となり、これは 17² に等しいため、結果は True となります。

解決の手順

  • x を文字列に変換して first_num に代入する
  • y を文字列に変換して second_num に代入する
  • first_numsecond_num を連結し、整数に変換したものを res_num に代入する
  • res_num の平方根の整数部分を sqrt_val に代入する
  • sqrt_val * sqrt_valres_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

このように、数値を一度文字列に変換して連結し、再び整数へ戻すというシンプルなアプローチで、連結数が完全平方数かどうかを効率的に判定できます。

  1. Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法

    ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け

  2. Pythonで左右の部分木の入れ替えにより2つの二分木を一致させられるか判定する方法

    問題の概要 2つの二分木が与えられたとき、任意のノードについて左部分木と右部分木を何度でも入れ替えてよいと仮定します。この操作を繰り返すことで、1つ目の木を2つ目の木とまったく同じ形に変換できるかどうかを判定するのが、この記事で扱う問題です。 例えば、次のような2つの木が入力として与えられた場合、左右の入れ替えによって一致させられるため、出力は True になります。 解決のアプローチ この問題は、幅優先探索(BFS)の考え方を使い、木をレベル(深さ)ごとに処理しながらノードの値を比較することで解けます。左右の入れ替えによって同じレベル内の値の並び順は反転し得るため、「順方向」または「逆方