第12个术语F12是第一个包含三位数的术语。
斐波纳契数列中第一项包含1000个数字的索引是什么?
a = 1
b = 1
i = 2
while(1):
c = a + b
i += 1
length = len(str(c))
if length == 1000:
print(i)
break
a = b
b = c
我得到了答案(工作足够快)。只是在寻找解决这个问题的更好方法
答案 0 :(得分:0)
如果您回答了该问题,您将在problem thread中找到许多答案的解释。您发布的解决方案几乎可以。只需在每个步骤检查您的ReSharper
而不是先将其转换为字符串,即可稍微提高速度。
更好的方法是利用以下事实:当斐波那契数变得足够大时,斐波那契数会收敛到c>=10^999
,其中round(phi**n/(5**.5))
是黄金比率,而phi=1.6180...
则舍入{{1 }}到最接近的整数。让我们考虑找到第一个斐波纳契数超过round(x)
位的一般情况。然后,我们正在寻找x
我们只需取两边的对数即可观察到
m
,然后求解n
。
如果您想知道“我怎么知道它已经被第round(phi**n/(5**.5)) >= 10**(m-1)
个数字收敛了?”好吧,您可以自己检查,也可以look online。
此外,我认为类似这样的问题属于Code Review SE或Computer Science SE。甚至Math Overflow也是Euler项目问题的好地方,因为许多问题都植根于数论。
答案 1 :(得分:0)
您的解决方案对于项目euler上的#25完全适用。但是,如果您真的想在此处优化速度,则可以尝试使用我在此博客文章中写过的身份来计算斐波那契:https://sloperium.github.io/calculating-the-last-digits-of-large-fibonacci-numbers.html
<Chip>
此代码的测试速度比解决方案快12倍。 (尽管确实需要对最大尺寸进行初步猜测)