GolfScript, 59 Zeichen
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Dieses Skript erfüllt einige der Anforderungen nicht:
- Es funktioniert nur bei Eingaben korrekt
n >= 2, sonst stürzt es ab.
- Die Ausgabe wird auf eine Ganzzahl gekürzt.
- Schreckliche Leistung für alle mäßig großen
n
Eine kurze Anleitung zum Code:
~:N..*Die Eingabe wird in N gespeichert und wir drücken beide nund das Quadrat n*nsofort.
.,2>Wir werden eine Liste von Primzahlen erzeugen, indem wir das Array filtern [2..n*n]. Wir verwenden unsere vorherige Berechnung von n*nals (sehr schlechte!) Obergrenze, um eine Primzahl zu finden, die größer als n ist.
{:P{(.P\%}do(!},Unser bisheriges Array wird nach Testdivision gefiltert. Jede Ganzzahl P wird gegen jede Ganzzahl [P-1..1] getestet.
{{N-.*}$0=}:C~Sortiert das vorherige Array basierend auf dem Abstand zu nund erfasst das erste Element. Jetzt haben wir die nächste Primzahl.
[1.{.@+.N<}do]CWir erzeugen Fibonnacis, bis wir eins größer als erhalten n. Glücklicherweise verfolgt dieser Algorithmus natürlich die vorherigen Fibonnaci, sodass wir beide in ein Array werfen und unsere frühere Entfernungssortierung verwenden. Jetzt haben wir die nächsten Fibonnaci.
+++4/Durchschnittlich. Beachten Sie, dass GolfScript keine Floats unterstützt, sodass das Ergebnis abgeschnitten wird.
GolfScript, 81 Zeichen
Hier ist eine Variante, die alle Anforderungen erfüllt.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Um ein einwandfreies Verhalten zu gewährleisten n<2, vermeide ich 2<(stürzt ab, wenn das Array klein ist) und verwende stattdessen 3,|2,^. Dies stellt sicher, dass das Hauptkandidatenarray genau [2]dann ist, wenn n < 2. Ich habe die Obergrenze für die nächste Primzahl von n*nnach 2*n( Bertrands Postulat ) geändert . Auch 0 gilt als Fibonnaci-Zahl. Das Ergebnis wird am Ende in Festkomma-Mathematik berechnet. Interessanterweise scheint das Ergebnis immer in Vierteln zu sein (0, .25, .5, .75), daher hoffe ich, dass 2 Dezimalstellen Genauigkeit ausreichen.
Mein erster Riss bei der Verwendung von GolfScript, ich bin sicher, es gibt Raum für Verbesserungen!