Pythonで数値に1を加えた後に完全平方数になるかどうかを判定する方法
問題の概要
ある数値 n が与えられたとき、その数値に 1 を加えることで完全平方数(ある整数の2乗として表せる数)にできるかどうかを判定します。
例えば、入力が n = 288 の場合を考えてみましょう。1を加えると 289 となり、これは 17² と等しいため、出力は True になります。
解法のアプローチ
この問題は、以下の手順でシンプルに解くことができます。
res_num := n + 1… 対象となる数値を計算するsqrt_val := res_num の平方根の整数部分sqrt_val * sqrt_valがres_numと一致する場合はTrueを返す- それ以外の場合は
Falseを返す
この方法のポイントは、平方根を一度だけ計算し、その整数部分を2乗して元の数値と比較することで、完全平方数かどうかを効率的に判定できる点です。
サンプルコード
from math import sqrt
def solve(n):
res_num = n + 1
sqrt_val = int(sqrt(res_num))
if sqrt_val * sqrt_val == res_num:
return True
return False
n = 288
print(solve(n))入力
288
出力
True
補足
math.sqrt() は浮動小数点演算を行うため、非常に大きな数値を扱う場合には誤差が生じる可能性があります。そのようなケースでは、math.isqrt()(Python 3.8以降)を使用すると、整数のまま正確な平方根を求められるため、より安全です。
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonでナルシスト数(アームストロング数)を判定するプログラムの作成方法
ナルシスト数とは? ナルシスト数(Narcissistic Number、別名:アームストロング数)とは、「各桁の数字を桁数乗して合計した値が、元の数そのものと一致する数」のことです。 例えば、9474 を考えてみましょう。この数は4桁なので、各桁の数字を4乗して足し合わせます。 9^4 + 4^4 + 7^4 + 4^4 = 6561 + 256 + 2401 + 256 = 9474 計算結果が元の数 9474 と一致しているため、9474 はナルシスト数であると言えます。 判定アルゴリズムの手順 この問題を解くためには、以下の手順に従います。 数値 n を文字列に変換し、各桁の数字を