ThePirateBay sayesinde -3 bayt -1 bayt
-8 -9 bayt Neil sayesinde.
f=(n,a=1,b=0,c=(a,b)=>b<n?c(a+b,a):b>n)=>c(a,b)?b+2<a?f(n,a-1,b+1):f(n,b-~a):[b,a]
Çevrimiçi deneyin!
Not: Bu çözüm hiçbir zaman çok sayıda minimal çözüm bulunmamasına dayanır.
Asla birden fazla çözüm olmadığının kanıtı:
Izin FIB(a,b,k)
başlayarak Fibonacci benzeri dizisi olabilir a,b
:
FIB(a,b,0) = a
FIB(a,b,1) = b
FIB(a,b,k) = FIB(a,b,k-1) + FIB(a,b,k-2)
Lemma 1
Fibonacci benzeri diziler arasındaki fark, kendisi Fibonacci benzeri, yani FIB(a1,b1,k) - FIB(a0,b0,k) = FIB(a1-a0,b1-b0,k)
. İspat okuyucuya bırakılmıştır.
Lemma 2
Çünkü tatmin edici n >= 5
bir çözüm a,b
var a+b < n
:
eğer öyleyse n
,FIB(0,n/2,3) = n
eğer n
tuhafsaFIB(1,(n-1)/2,3) = n
Kanıt
Kılıflar n < 5
etraflıca kontrol edilebilir.
Biz iki asgari çözüm olduğunu varsayalım n >= 5
, a0,b0
ve a1,b1
ile a0 + b0 = a1 + b1
ve a0 != a1
.
Sonra k0,k1
böyle var FIB(a0,b0,k0) = FIB(a1,b1,k1) = n
.
Dava 1: k0 = k1
WLOG varsayalım b0 < b1
(ve dolayısıyla a0 > a1
)
Izin DIFF(k)
arasındaki fark Fibonnaci benzeri ile başlayan dizileri a1,b1
ve a0,b0
:
DIFF(k) = FIB(a1,b1,k) - FIB(a0,b0,k) = FIB(a1-a0,b1-b0,k)
(Lemma 1)
DIFF(0) = a1 - a0 < 0
DIFF(1) = b1 - b0 > 0
DIFF(2) = (a1+b1) - (a0+b0) = 0
DIFF(3) = DIFF(1) + DIFF(2) = DIFF(1) > 0
DIFF(4) = DIFF(2) + DIFF(3) = DIFF(3) > 0
Bir Fibonnaci benzeri sekans 2 pozitif terime sahip olduğunda, sonraki tüm terimler pozitiftir.
Böylece, tek zaman DIFF(k) = 0
ne zamandır k = 2
, yani tek seçenek k0 = k1
budur 2
.
bu nedenle n = FIB(a0,b0,2) = a0 + b0 = a1 + b1
Bu çözümlerin minimalliği Lemma 2 ile çelişiyor.
Durum 2 k0 != k1
::
WLOG varsayalım k0 < k1
.
Sahibiz FIB(a1,b1,k1) = n
let a2 = FIB(a1,b1,k1-k0)
let b2 = FIB(a1,b1,k1-k0+1)
Sonra FIB(a2,b2,k0) = FIB(a1,b1,k1) = FIB(a0,b0,k0)
(okuyucu için egzersiz)
Yana FIB(a1,b1,k)
negatif olmayan için k >= 0
, aynı zamanda sigara azalıyor.
Bu bize a2 >= b1 > a0
ve verir b2 >= a1+b1 = a0+b0
.
Öyleyse bırak DIFF(k) = FIB(a2,b2,k) - FIB(a0,b0,k) = FIB(a2-a0,b2-b0,k)
(Lemma 1)
DIFF(0) = a2 - a0 > 0
DIFF(1) = b2 - b0 >= (a0 + b0) - b0 = a0 >= 0
DIFF(2) = DIFF(0) + DIFF(1) >= DIFF(0) > 0
DIFF(3) = DIFF(1) + DIFF(2) >= DIFF(2) > 0
Bir kez daha DIFF
2 olumlu terim var ve bu nedenle sonraki tüm terimler olumlu.
Böylece, bu mümkün sadece zaman DIFF(k) = 0
olduğu k = 1
için bu kadar tek seçenek, k0
bir 1
.
FIB(a0,b0,1) = n
b0 = n
Bu Lemma 2 ile çelişiyor.
a>=0
ve varsaa<b
?