Spoiler tag aktiválva van a topikban. A megoldásodat [SP] [/SP] tagek közé írd.
[ Szerkesztve ]
Spoiler tag aktiválva van a topikban. A megoldásodat [SP] [/SP] tagek közé írd.
[ Szerkesztve ]
Egyébként mi a verseny lényege? Ki tudja nagyobb n-re megadni? Van kalkulátor bőven a neten, vannak közte elég gyorsak is.
n=15000-re:
976683548980000
[ Szerkesztve ]
Itt van n=20000-re. Jó szórakozást a többihez. Ez elvileg 4719 karakter.
while c:a,b,c,d=b,a+b,c-1,print(a)
booring.
"A Fibonacci szabályát mindenki ismeri:"
Hogynepersze.
Művelt, intelligens barátomat idézném, aki minden matek óra végén csak 1 kérdést tett fel a tanárnak:
"Mi?"
Tehát az én bash+linux megoldásom:
#! /bin/bash
( tail -2 fibonacci.txt | head -1 | tr -d '\n'
echo -n '+'
tail -1 fibonacci.txt ) | bc | \
sed -e 's/\\$//' | tr -d '\n' | tee -a fibonacci.txt
printf "\n">>fibonacci.txt
printf "\n"
fibonacci(n):
return int(1/sqrt(5)*(((1+sqrt(5))/2)**n - ((1-sqrt(5))/2)**n))
Matematikus vagyok én, nem programozó!
[ Szerkesztve ]
ezzel az a gond, hogy nem pontos.
F(200)-hoz 43 tizedesjegynél még nem elég pontos, legalább 44 kell, vagy több.
Nem vagyok Python közelében, nem tudtam. Majd írok hozzá valami gyökös kifejezéseket kezelő osztályt, és az jó lesz. Legalább nagy számokra gyors lesz!
ez olvashatatlansagban szerintem verhetetlen, de nem en irtam. es hagyom linken, mert picit tul hosszu lenne.
Mennyire ciki, ha nem értem hogy működik ez a kifejezés?
Van az n-edik Fibonacci-számra egzakt képlet.
a postgresql mindenre jó kategória indulója:tmp=> \d fibonacci
Table "public.fibonacci"
Column | Type | Modifiers
--------+---------+-------------------------------------------------------
n | bigint | not null default nextval('fibonacci_n_seq'::regclass)
fib | numeric |
psql -d tmp -c "insert into fibonacci (fib) \
select f1.fib+f2.fib from fibonacci f1, fibonacci f2 \
where f1.n=(select last_value from fibonacci_n_seq ) and \
f2.n=(select last_value-1 from fibonacci_n_seq );"
[ Szerkesztve ]
Amikor elolvastam a blogpostot, egyből beugrott, hogy az egyetlen valamirevaló megoldásnak kombinálnia kell egy adatbázist rekurzióval. Arra, hogy az egyik számot az egyik, a másikat pedig másik táblában tárolod kölcsönöz egy különleges eleganciát a programnak...
[ Szerkesztve ]
szerintem sokkal különlegesebb megoldás, hogy összesen egy tábla van és abban van minden szám.
Gyorsabb, mint a linearis iterativ megoldas:(define (fib n)
(define (square a) (* a a))
(define (fib-iter a b p q count)
(cond ((zero? count) b)
((even? count) (fib-iter a
b
(+ (square p) (square q))
(+ (* 2 p q) (square q))
(/ count 2)))
(else (fib-iter (+ (* b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
q
(- count 1)))))
(fib-iter 1 0 0 1 n))