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

Pythonで指定した数値がフィボナッチ数かどうかを判定する方法

フィボナッチ数とは

ある数値 n が与えられたとき、その数がフィボナッチ数列に含まれているかどうかを判定します。フィボナッチ数列は、f(0) = 0、f(1) = 1 を初期値とし、i ≥ 2 の各項について f(i) = f(i-1) + f(i-2) という漸化式で定義される数列です。

具体的には、数列は 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... のように続きます。たとえば入力が n = 13 の場合、13 はフィボナッチ数列に含まれるため、出力は True になります。

解法のアプローチ:黄金比を利用した判定

この問題は、黄金比(φ ≈ 1.618...)の性質を利用することで効率的に解けます。フィボナッチ数と黄金比の間には深い数学的な関係があり、n がフィボナッチ数である場合、φ × n はほぼ整数に近い値になります。この性質を利用して、以下の手順で判定を行います。

  • phi := 0.5 + 0.5 × √5.0(黄金比 φ を計算)
  • a := phi × n(n に黄金比を掛ける)
  • n が 0 である、または a が整数(丸めた値との差が十分小さい)場合に True を返す

実装例

以下にPythonでの実装例を示します。

from math import sqrt

def solve(n):
    phi = 0.5 + 0.5 * 5.0**0.5
    a = phi * n
    return n == 0 or abs(round(a) - a) < 1.0 / n

n = 13
print(solve(n))

入力

13

出力

True

コードのポイント

このアルゴリズムの計算量は O(1) であり、数列を順番に生成しながら比較する方法(O(n))よりもはるかに高速です。ただし、浮動小数点演算には精度の限界があるため、非常に大きな数値を扱う場合は誤差に注意が必要です。このコードでは許容誤差を 1.0 / n として設定することで、大きな数に対しても判定精度を保っています。

  1. n番目のフィボナッチ数を求めるPythonプログラム【再帰・動的計画法】

    本記事では、n番目のフィボナッチ数を計算するPythonプログラムについて解説します。フィボナッチ数とは?フィボナッチ数とは、次の漸化式で定義される数列のことです。Fn = Fn-1 + Fn-2ただし、初期値は F0 = 0、F1 = 1 とします。フィボナッチ数列の最初のいくつかの値は以下の通りです。0, 1, 1, 2, 3, 5, 8, 13, ..................フィボナッチ数は、再帰と動的計画法(Dynamic Programming)という2つの代表的な手法で求めることができます。それでは、それぞれの実装方法をPythonスクリプトで見ていきましょう。方法1:再帰

  2. 【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説

    本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が