Wenn 1 nicht als Faktor gezählt wird, dann
- 40 hat zwei benachbarte Faktoren (4 und 5)
- 1092 hat zwei benachbarte Faktoren (13 und 14)
- 350 hat keine zwei benachbarten Faktoren (von den Faktoren 2, 5, 7, 10, 14, 25, 35, 50, 70 und 175 sind keine zwei aufeinanderfolgend)
Der Anteil positiver Ganzzahlen mit dieser Eigenschaft ist der Anteil, der durch 6 (2 × 3), 12 (3 × 4), 20 (4 × 5), 30, 56,… teilbar ist. Wenn wir nur den Anteil berechnen, der durch das erste n davon teilbar ist , erhalten wir eine Näherung, die mit zunehmendem n genauer wird.
Zum Beispiel finden wir für n = 1 den Anteil der ganzen Zahlen, der durch 2 × 3 = 6 teilbar ist, was 1/6 ist. Für n = 2 sind alle durch 3 × 4 = 12 teilbaren ganzen Zahlen auch durch 6 teilbar, sodass die Näherung immer noch 1/6 beträgt. Für n = 3 beträgt der Anteil der durch 6 oder 20 teilbaren ganzen Zahlen 1/5 und so weiter.
Hier sind die ersten Werte:
1 1/6 0.16666666666666666
3 1/5 0.20000000000000000
6 22/105 0.20952380952380953
9 491/2310 0.21255411255411255
12 2153/10010 0.21508491508491510
15 36887/170170 0.21676558735382265
21 65563/301070 0.21776663234463747
24 853883/3913910 0.21816623274423785
27 24796879/113503390 0.21846817967287144
Für Werte von n zwischen den angegebenen Werten sollte die Ausgabe dieselbe sein wie die Ausgabe für den obigen Wert (z. B. n = 5 → 1/5).
Ihr Programm sollte n nehmen und entweder einen Bruch oder eine Dezimalantwort ausgeben. Sie können n bei jedem Versatz nehmen (z. B. 0-Indizierung oder 2-Indizierung in diese Sequenz anstelle von 1-Indizierung).
Für die Dezimalausgabe muss Ihr Programm für alle angegebenen Testfälle auf mindestens 5 Stellen genau sein.
Das Scoring ist Code-Golf , wobei der kürzeste Code gewinnt.
Inspiriert von Welcher Anteil positiver Ganzzahlen hat zwei Faktoren, die sich um 1 unterscheiden? von marty cohen - insbesondere von Dan ‚s Antwort.
Antworten:
Gelee ,
14 1310 Bytes-1 unter Verwendung der Idee von Erik dem Outgolfer, den Mittelwert einer Liste von Nullen und Einsen zu nehmen.
-3 durch 3-Indexierung (wie in der Frage erlaubt) - danke an Dennis für den Hinweis.
Ein monadischer Link, der eine Ganzzahl akzeptiert
n+2
, die einen Float ergibt.Probieren Sie es online aus! (sehr ineffizient, da es die Teilbarkeit über den Bereichtestet)[ 2 , ( n + 2 ) ! ]]
(Begonnen als
+2µḊPƝḍⱮ!§T,$Ẉ
, nehmenn
und nachgeben[numerator, denominator]
, nicht reduziert)Wie?
quelle
!
anstelle vonæl/
... Ah, die Freude an Regeln, die sich im Schlaf ändern.P
, um auf 13 zu kommen?Ẹ€
? Ich fürchte, esP
ist dasselbe wie׃1$
, also wird es nicht funktionieren. (Und das wären sowieso 14 ...) Wenn stattdessenæl/
vielleicht (P
ist doch LCM * k).æl/
æl/
mir. (Nachteulengolf hat Probleme ...) EDIT: Ja, obwohl ich den Streit um TIO auf4
... reduzieren muss : P05AB1E , 15 Bytes
Port of @JonathanAllans Jelly Antwort , also auch extrem langsam.
Probieren Sie es online aus oder überprüfen Sie die ersten drei Testfälle .
Erläuterung:
quelle
JavaScript (ES6),
94 9290 Bytes2 Bytes dank @Shaggy + 2 weitere Bytes von dort gespeichert
Gibt eine Dezimalnäherung zurück.
Probieren Sie es online aus!
JavaScript (ES6), 131 Byte
Probieren Sie es online aus!
quelle
Gelee , 12 Bytes
Probieren Sie es online aus!
-2 dank Jonathan Allans Vorschlag, das LCM durch das Produkt zu ersetzen (dh das LCM multipliziert mit einer ganzen Zahl).
Dennis bemerkte, dass ich auch 2-Index kann.
quelle
Holzkohle , 26 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Hoffnungslos ineffizient (O (n! ²)), funktioniert also nur bis zu
n=4
TIO. Erläuterung:Geben Sie
n
die erstenn
Produkte benachbarter Faktoren ein und berechnen Sie sie .Nehmen Sie das Produkt all dieser Faktoren und berechnen Sie daraus den Anteil der Zahlen mit mindestens einem dieser Faktoren.
30-Byte weniger langsame Version ist nur O (n!), Kann also bis zu
n=6
TIO tun :Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes.
Die 46-Byte-Version ist nur O (lcm (1..n + 2)) und kann daher bis zun=10
TIO ausgeführt werden:Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes.Die um 45 Byte schnellere Version ist nur O (2ⁿ), kann also bis zu
n=13
TIO:Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes.
Die schnellste 54-Byte-Version verwendet effizienteres LCM und kann daher bis zu
n=18
TIO:Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes.
quelle
Wolfram Language (Mathematica) ,
69686152 ByteProbieren Sie es online aus!
3-indiziert. Zuerst wollte ich verwenden,
LCM@@
aber mir wurde klar, dass#!
das kürzer sein würde ... aber jetzt ist es viel Speicher fürRange[#!]
...Es ist gelungen, den Zustand um 2 Bytes zu verbessern, was sehr schön war.
Ältere numerische Lösung (56 Bytes):
Probieren Sie es online aus!
2-indiziert. Effizienter, wenn
#!>5^8
(#>9
vorausgesetzt, es#
handelt sich um eine Ganzzahl).quelle
Python 2 , 78 Bytes
Probieren Sie es online aus!
Gibt die ungefähre Dezimalstelle auf +5 Stellen zurück. verwendet den naiven Brute-Force-Ansatz, den xnor in Kommentaren zu der Frage vorschlägt.
quelle