我试图解决一个谜题,其中涉及找到包含n
数字的第一个Fibonacci数。
我写了这个函数,并且惊喜地看到它适用于非常大的n
值并且产生非常快的结果。这背后的秘密是什么?
def fib_morethan (n):
'''return first Fibonacci number > n and its index'''
if n < 0:
return (1, 0)
a, b = 0, 1
counter = 1
while b <= n:
a, b, counter = b, a + b, counter + 1
return counter + 1, b
测试输出
%time fib_morethan(10**70)
Wall time: 0 ns
(337, 12004657173391489668678522013941832147005954727556362660159637892443617)
%time fib_morethan(10**999)
Wall time: 1 ms
(4783, 10700... (990 digits here) ... 27816)