2

私はここでこのタスクを見つけました。

i番目(1 <= i <= 35)のフィボナッチ数F(i)が与えられた場合、i + 9番目の数F(i)+ F(i + 1)+ ... + F(i+9までのi番目の合計を計算します。 )および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の初心者なので、解決策を成功させるためのあらゆる種類の支援をいただければ幸いです。

ありがとう、

4

6 に答える 6

5

この合計式を使用しようとしましたか?

http://en.wikipedia.org/wiki/Fibonacci_number#Second_identity( "Second Identity")?

于 2011-04-06T12:36:06.780 に答える
2

f = lambda n,t=5**.5:((1+t)**n-(1-t)**n)/(2**n*t)などは12を得るために8文字を費やし,t=5**.5ます:3ロット5**.5-> t。これは4文字の節約であり、必要なもののようです。

[タイプミスを修正するために編集; 2*n分母の代わりに持ってい2**nました。]

Binetの式に別のひねりを加えて、さらにいくつかの文字を保存できますf=lambda n:round((1+5**.5)**n/5**.5/2**n)

于 2011-04-06T12:28:37.430 に答える
1

これが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()
于 2011-04-06T13:43:45.660 に答える
0

申し訳ありませんが、投稿する前に質問を正しく読みませんでした。私はあなたが少なくともそれにいくつかの用途を見つけてくれてうれしいです。


私は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&
于 2011-04-06T12:30:34.490 に答える
0
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()

int()関数を気にせず、floatを受け入れる限り106文字

于 2011-04-06T12:55:59.303 に答える
-1

これは、フィボナッチ数列をnまで印刷します。

def fib(n):    
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
        print()
于 2011-10-05T21:14:33.550 に答える