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

Pythonで数値に1を加えた後に完全平方数になるかどうかを判定する方法

問題の概要

ある数値 n が与えられたとき、その数値に 1 を加えることで完全平方数(ある整数の2乗として表せる数)にできるかどうかを判定します。

例えば、入力が n = 288 の場合を考えてみましょう。1を加えると 289 となり、これは 17² と等しいため、出力は True になります。

解法のアプローチ

この問題は、以下の手順でシンプルに解くことができます。

  • res_num := n + 1 … 対象となる数値を計算する
  • sqrt_val := res_num の平方根の整数部分
  • sqrt_val * sqrt_valres_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以降)を使用すると、整数のまま正確な平方根を求められるため、より安全です。

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

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

  2. Pythonでナルシスト数(アームストロング数)を判定するプログラムの作成方法

    ナルシスト数とは? ナルシスト数(Narcissistic Number、別名:アームストロング数)とは、「各桁の数字を桁数乗して合計した値が、元の数そのものと一致する数」のことです。 例えば、9474 を考えてみましょう。この数は4桁なので、各桁の数字を4乗して足し合わせます。 9^4 + 4^4 + 7^4 + 4^4 = 6561 + 256 + 2401 + 256 = 9474 計算結果が元の数 9474 と一致しているため、9474 はナルシスト数であると言えます。 判定アルゴリズムの手順 この問題を解くためには、以下の手順に従います。 数値 n を文字列に変換し、各桁の数字を