Sie sollten von den Fibonacci-Zahlen gehört haben , die oft als Fibonacci-Sequenz bezeichnet werden. In dieser Sequenz sind die ersten beiden Terme 0 und 1, und jede Zahl nach den ersten beiden ist die Summe der beiden vorhergehenden. Mit anderen Worten F(n) = F(n-1) + F(n-2)
.
Hier sind die ersten 20 Fibonacci-Zahlen:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
Aufgabe:
x
Berechnen Sie bei einer gegebenen ganzen Zahl das arithmetische Mittel (den Durchschnitt) der Fibonacci-Primzahlen bis zur x
Nummer der Fibonacci-Sequenz.
Regeln:
- Die Fibonacci-Sequenz beginnt bei dieser Herausforderung mit 0 und 1
3 < x < 40
, weil höhere Werte vonx
möglicherweise eine sehr lange Ausführungszeit oder Überläufe verursachen und kleinere Werte keine Ausgabe haben- 1 ist NICHT prim, da es nur 1 Divisor hat
- Das arithmetische Mittel sollte, falls zutreffend, Dezimalzahlen enthalten oder als exakter Bruch angezeigt werden
- Sie dürfen nur
x
als Eingabe nehmen und der Code, der für die Eingabe benötigt wird, zählt nicht (zB: Wenn Sie etwas benötigenx = input()
, sollten Sie es beim Zählen der Bytes nicht berücksichtigen).
Beispiele:
Ex. 1: Denn x=10
die Ausgabe ist 5.75
, weil die 10. Fibonacci-Zahl ist 55
und die Primzahlen bis zu Fibonacci 55
sind 2, 3, 5, 13
, ihr Durchschnittswert5.75
Nach der Erläuterung von Beispiel 1 sind andere Beispiele:
Ex. 2: Für x=15
ist die Ausgabe57.5
Ex. 3: Für x=20
ist die Ausgabe 277.428571428571
oder eine andere enge Annäherung. In diesem Fall 277.4286
ist zum Beispiel ein akzeptierter Wert
Ex. 4: Für x=11
ist die Ausgabe22.4
Ex. 5: Für x=30
ist die Ausgabe 60536.4444444444
oder eine andere enge Annäherung, wie z60536.444
Bestenliste:
Senden Sie eine kürzere gültige Lösung, um den Anführer zu ändern. Ihr Code sollte so kurz wie möglich sein, da dies Code-Golf ist , damit die kürzeste Antwort in Bytes gewinnt. Viel Glück!
Antworten:
Eigentlich 10 Bytes
Code:
Erläuterung:
Verwendet die CP-437- Codierung. Probieren Sie es online!
quelle
Python 2 , 71 Bytes
Probieren Sie es online!
Python hat dafür keine nützlichen arithmetischen Funktionen, daher erledigen wir die Dinge von Hand. Der Code durchläuft Fibonacci-Zahlen über
a,b=b,a+b
aba=b=1
.Der Fermat-Primalitätstest mit Basis 2 wird verwendet, um Primzahlen als
a
wo zu identifizieren2^a == 2 (mod a)
. Obwohl hiermit nur nach wahrscheinlichen Primzahlen gesucht wird, liegt keine der falsch-positiven Zahlen innerhalb der ersten 40 Fibonacci-Zahlen.Die aktuelle Summe
s
und Anzahlc
der Primzahlen wird jedes Mal aktualisiert, wenn eine Primzahl angetroffen wird, und ihr Verhältnis (der Mittelwert) wird am Ende gedruckt. Da der Prime Check fehlschlägta=2
und garantiert im Eingabebereich liegt, beginnt die Summe bei 2 und die Zählung beginnt bei 1, um dies zu kompensieren.quelle
Jelly , 11 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Mathematica, 38 Bytes
Erläuterung
quelle
#
und nicht#-1
: Das OP sagt, dass 55 die 10. Fibonacci-Zahl ist, daher muss ihre Liste mit 0 indiziert sein (wie es die beste Konvention ist). Vergleichen Sie Ihren Ausgang für Eingänge10
und11
mit dem OP. Zum Glück spart das drei Bytes!&
und ersetzen#
durchx
(Frage besagt, dass Eingabe unter Code nicht bewertet wird)Perl 6 , 51 Bytes
Versuch es
Erweitert:
quelle
MATL , 16 Bytes
Probieren Sie es online!
Erläuterung
quelle
Oktave ,
7571 BytesAnonyme Funktion, die die Binet-Formel verwendet . Ein- und Ausgabe erfolgen in Form von Funktionsargumenten.
Probieren Sie es online!
quelle
isprime
die perfekt für diese Herausforderung geeignet ist.Maxima, 49 Bytes
quelle
Prolog (SWI) ,
269264254218 BytesIch bin mir ziemlich sicher, dass ich noch ein paar Bytes mehr Golf spielen könnte.
Führen Sie es aus wie
a(15, R).
für x = 15 , R ist die Ausgabevariable.Probieren Sie es online!
Eine lesbarere Version:
quelle
N*C:-
solche Dinge für Kopfdeklarationen in PPCG zulässig sind, wodurch Sie einige Bytes sparen können.p(N,C):-
mitN*C:-
?Röda ,
989493 BytesEs ist eine Funktion, die das Ergebnis als Gleitkommazahl zurückgibt.
Ungolfed-Version:
quelle
c%p>0
anstelle von tunc%p!=0
?05AB1E , 13 Bytes
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
Pyke , 11 Bytes
Probieren Sie es online!
quelle
Gleichstrom , 129 Bytes
Ein Fibonacci-Zahlengenerator und ein Primalitätsprüfer in einem. Nett.
Probieren Sie es online!
quelle
Japt , 14 Bytes
Probier es aus
Erläuterung
Implizite Eingabe einer Ganzzahl
U
.30
Generieren Sie ein Array von Ganzzahlen von 0 bis
U
einschließlich.[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
Übergeben Sie jede Ganzzahl durch eine Funktion.
Holen Sie sich die
X
th Fibonacci-Zahl, woX
ist das aktuelle Element.Filtern Sie (
f
) das Array zu den Elementen, die beim Überprüfen auf Primalität (j
) die Wahrheit zurückgeben . Ordnen Sie das resultierende Array implizit der Variablen zuU
.[2,3,5,13,89,233,1597,28657,514229]
Reduzieren Sie das Array durch Summieren.
544828
Teilen Sie das Ergebnis durch die Länge des Arrays (
l
) und geben Sie das Ergebnis implizit aus.60536.444444444445
quelle
Perl, 91 Bytes
Cuold war 8 Bytes kürzer, wenn der Modulo-Pseudoprime-Test sowohl in Perl als auch in der Python-Antwort funktionierte:
... aber dies gibt eine falsche Antwort für Eingaben> 16 in Perl.
quelle
Axiom, 104 Bytes
ungolfed, test code und ergebnisse
ich versuche den matematica, octave etc sprachen eintrag zu duplizieren, wenn man die mean () funktion nicht mitzählt, wäre es hier 62 bytes auch so gut umzusetzen
quelle
JavaScript ES6,
137136118113 BytesGeschichte
118 Bytes
136 Bytes
137 Bytes
quelle