python - 如何找到给定斐波那契数的索引

标签 python c++ math fibonacci

我尝试使用下面的公式

formula

在编程问题中找到斐波那契数(text)的索引,所有较小的测试用例都通过了,但一些 F 接近 10^18 的情况失败了。我做了一些试运行,发现如果 F = 99194853094755497(第 82 个斐波那契数),根据上面的公式,n 的值为 81。我用 Python 和 C++ 编写了这个代码,可以找到 herehere分别。我想知道该公式是否适用于 F 的每个值或是否有一些限制?

注意:在做了更多测试后,我发现代码给出了正确的答案,直到第 52 个斐波那契数。

更新:问题有 t 个测试用例,这就是我使用 for 循环的原因。给定的数字 F 不一定是斐波那契数。例如,如果 F = 6,则它位于两个斐波那契数列 5 和 8 之间。现在斐波那契数列中“5”的索引为 4,因此答案为 4。

最佳答案

这个公式很好用:

import math
n = 99194853094755497
print math.log(n * math.sqrt(5) + 0.5) / math.log(1.61803398875) - 1

输出:

82.0

对您的代码的评论:

  • 如果浮点结果非常接近 82.0,则使用 int(...) 舍入为整数可能会导致问题。数值问题可能会导致它稍微大一些,即使在数学上它会更小。

关于python - 如何找到给定斐波那契数的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126627/

相关文章:

c++ - 令人困惑的 typedef 涉及类范围

c++ - &member 到 const 成员

algorithm - 非常长的整数的乘法

swift - 重新计算图表中不同比例的值

python - 如何检查字符串是否包含字母表中的任何字母?

python - 有没有比使用装饰器在不编辑函数的情况下记录输出更好的方法?

python - 寻找二叉树中的最小值,Python

c++ - 为什么 std::locale ("").name() 在 clang 和 gcc 上给出不同的结果?

c# - 简单的数学题 :

python - 调用嵌入式Python模块时,是否切换了线程?