Fibonacci数的和

我在这里找到了这个任务。   给定第i个(1 <= i <= 35)斐波那契   数字F(i)计算总和   ith直到i + 9号   F(i)+ F(i + 1)+ ... + F(i + 9)和最后一个   i + 246个F(i + 246)的数字 我一直试图用python和一些技巧来解决这个问题(Binnet的公式和一个棘手的重复):
 f=lambda n:((1+5**.5)**n-(1-5**.5)**n)/(2**n*5**.5)
 exec"n=input();print int(55*f(n)+88*f(n+1)+f(n+6)%10);"*input()
但我还没有设法挤出认为给出源代码限制为111而我的是115,任何提示如何改进我的解决方案? 我是python的新手,所以任何形式的帮助都会得到成功的解决方案。 谢谢,     
已邀请:
f = lambda n,t=5**.5:((1+t)**n-(1-t)**n)/(2**n*t)
等花8个字符
,t=5**.5
获得12:三个lots3ѭ - >
t
。这是一个4个字符的保存,这似乎是你需要的。 [编辑纠正错字;我在分母中有
2*n
而不是
2**n
。 您可以在Binet的公式中以不同的方式保存更多的字符:
f=lambda n:round((1+5**.5)**n/5**.5/2**n)
。     
你试过用这个总和公式吗? http://en.wikipedia.org/wiki/Fibonacci_number#Second_identity(“第二身份”)?     
这是110解决方案,我不得不重写公式并使用@ Gareth的建议:
p=5**.5
f=lambda n:((1+p)**n-(1-p)**n)/(2**n*p)
exec "n=input();print int(f(n+11)-f(n+1)+f(n+6)%10);"*input()
保存另一个符号,109现在(用
n
操纵并摆脱
+11
):
p=5**.5
f=lambda n:((1+p)**n-(1-p)**n)/(2**n*p)
exec "n=input()+6;print int(f(n+5)-f(n-5)+f(n)%10);"*input()
编辑:计算特定数字的新方法,保存另外4个符号并允许避免
int()
def f(n):exec"a=b=1;"+"a,b=b,a+b;"*(n-1);return a
exec "n=input()+6;print f(n+5)-f(n-5)+f(n)%10;"*input()
    
p=5**.5
f=lambda n:((1+p)**n-(1-p)**n)/(2**n*p)
exec"n=input();print 55*f(n)+88*f(n+1)+f(n+6)%10;"*input()
106 chars只要你不关心int()函数并接受一个浮点数     
对不起我在发帖前没有正确阅读你的问题。我很高兴你至少找到了一些用途。 我不懂Python,但在Mathematica中,尽可能通用:
f[1] = 1;
f[2] = 1;
f[x_] := f[x] = f[x - 1] + f[x - 2]

t = 0;

n = 35;

For[i = 0, i <= 9, i++, t += f[n + i]]

t += f[n + 246] ~Mod~ 10
或者,在简洁的Mathematica中,仍然没有使用
Fibonacci
功能:
f[1|2]=1;a:f@x_:=a=f[x-1]+f[x-2];Sum[f[#+x],{x,0,9}]+f[#+246]~Mod~10&
    
这个将斐波纳契系列打印到n。
def fib(n):    
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
        print()
    

要回复问题请先登录注册