Pythonで与えられた数が完全平方数かどうかを判定する方法
ある数 n が与えられたとき、その数が完全平方数(perfect square)であるかどうかを判定します。完全平方数とは、その数の平方根が整数になる数のことです。
例えば、入力が n = 36 の場合、36 = 6 × 6 となるため、結果は True になります。
解決の手順
nの平方根を計算し、その整数部分を取得する- その整数を2乗した値が元の
nと一致すればTrue、そうでなければFalseを返す
実装例
以下のコードで実際に確認してみましょう。
from math import sqrt
def solve(n):
sq_root = int(sqrt(n))
return (sq_root * sq_root) == n
n = 36
print(solve(n))
入力
36
出力
True
コードのポイント
math.sqrt() は浮動小数点数(float)を返すため、int() で変換すると小数部分が切り捨てられます。この性質を利用して、2乗してもとに戻るかどうかで判定しています。
ただし、非常に大きな数値の場合は浮動小数点演算の誤差により正しく判定できないことがあります。Python 3.8 以降では、誤差のない整数平方根を求められる math.isqrt() を使うのがおすすめです。
import math
def solve(n):
sq_root = math.isqrt(n)
return sq_root * sq_root == n
print(solve(36)) # True
print(solve(37)) # False
-
Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法
本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて
-
【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説
本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が