Ein richtiger Teiler ist ein Teiler einer Zahl n , die nicht n selbst ist. Die richtigen Teiler von 12 sind beispielsweise 1, 2, 3, 4 und 6.
Sie erhalten eine ganze Zahl x , x ≥ 2, x ≤ 1000 . Ihre Aufgabe ist es, alle höchsten richtigen Teiler der ganzen Zahlen von 2 bis x (einschließlich) zu summieren (OEIS A280050 ).
Beispiel (mit x = 6
):
Finden Sie alle ganzen Zahlen zwischen 2 und 6 (einschließlich): 2,3,4,5,6.
Holen Sie sich die richtigen Teiler von allen und wählen Sie aus jeder Zahl die höchsten aus:
- 2 -> 1
- 3 -> 1
- 4 -> 1, 2
- 5 -> 1
- 6 -> 1, 2, 3 .
Addieren Sie die höchsten richtigen Divisoren:
1 + 1 + 2 + 1 + 3 = 8
.Das Endergebnis ist 8.
Testfälle
Eingabe | Ausgabe ------- + --------- | 2 | 1 4 | 4 6 | 8 8 | 13 15 | 41 37 | 229 100 | 1690 1000 | 165279
Regeln
Es gelten Standardlücken .
Sie können die Eingabe und Ausgabe nach einer beliebigen Standardmethode vornehmen .
Dies ist Code-Golf , die kürzeste gültige Einsendung in jeder Sprache gewinnt! Habe Spaß!
Antworten:
Oase , 4 Bytes
Code:
Probieren Sie es online!
Erläuterung:
Erweiterte Version:
quelle
Schale , 7 Bytes
Probieren Sie es online!
Erläuterung
Husk verfügt (noch) nicht über eine integrierte Funktion zur direkten Berechnung der Divisoren, daher verwende ich stattdessen die Primfaktor-Faktorisierung. Der größte richtige Teiler einer Zahl ist das Produkt seiner Primfaktoren mit Ausnahme des kleinsten. Ich ordne diese Funktion über den Bereich von 2 bis zur Eingabe zu und summiere die Ergebnisse.
quelle
Python 2 , 50 Bytes
Dies ist langsam und kann nicht einmal Eingang 15 von TIO bewältigen .
Probieren Sie es online!
Mit Memoization ( danke @ musicman523 ) können jedoch alle Testfälle überprüft werden.
Probieren Sie es online!
Alternative Version, 52 Byte
Auf Kosten von 2 Bytes können wir wählen, ob wir berechnen
f(n,k+1)
odern/k+f(n-1)
.Mit einigem Aufwand funktioniert dies für alle Testfälle, sogar für TIO.
Probieren Sie es online!
quelle
f
es sich um eine reine Funktion handelt , können Sie sich diese merken, um die größeren Fälle auf TIOGelee , 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Brachylog , 10 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 40 Byte
Eine Zahl entspricht dem Produkt seines höchsten richtigen Divisors und seines kleinsten Primfaktors.
quelle
n>352
(zumindest in diesem Snippet, weiß nicht, ob es meine Browser- / Maschinenabhängigkeit ist), während Sie mindestens upto unterstützen sollenn=1000
.n=1000
wenn Sie zB verwendennode --stack_size=8000
.05AB1E ,
98 Bytes-1 Byte dank Leaky Nuns Primfaktor-Trick in seiner Pyth-Antwort
Probieren Sie es online!
Erläuterung
Alternative 8-Byte-Lösung (Funktioniert bei TIO nicht)
und einer alternativen 9-Byte-Lösung (das funktioniert mit TIO)
quelle
Retina ,
3124 Bytes7 Bytes dank Martin Ender.
Probieren Sie es online!
Wie es funktioniert
Der reguläre Ausdruck
/^(1+)\1+$/
erfasst den größten richtigen Teiler einer bestimmten Anzahl, die in unary dargestellt ist. Im Code wird die\1+
Lookahead-Syntax verwendet.quelle
Mathematica, 30 Bytes
quelle
Pyth ,
1398 Bytes1 byte dank jacoblaw.
Testsuite .
Wie es funktioniert
Der größte richtige Teiler ist das Produkt der Primfaktoren mit Ausnahme des kleinsten.
quelle
Python 2 (PyPy) ,
737170 BytesNicht die kürzeste Antwort von Python, aber dies ist ein Kinderspiel in den Testfällen. TIO verarbeitet Eingaben bis zu 30.000.000, ohne ins Schwitzen zu geraten . Mein Desktop-Computer verarbeitet 300.000.000 in einer Minute.
Auf Kosten von 2 Bytes
n>d
könnte die Bedingung für eine Beschleunigung von ~ 10% verwendet werden.Danke an @xnor für die
r=[0]*n
Idee, die 3 Bytes gespart hat!Probieren Sie es online!
quelle
l=[0]*n
sollte Ihnen erlauben, loszuwerden-2
.exec
irgendwie tötet die Geschwindigkeit, aber auch einewhile
Schleife wäre kürzer als mein Ansatz.Haskell,
484643 BytesProbieren Sie es online!
Edit: @rogaos sparte zwei Bytes. Vielen Dank!
Edit II: ... und @nicht weitere 3 Bytes.
quelle
f 2=1 f n=last[d|d<-[1..n-1],mod n d<1]+f(n-1)
sum
, weshalb ich dachte, dass sie nicht kürzer ist.until
spart etwas mehr:until((<1).mod n)pred(n-1)+f(n-1)
Japt ,
8 + 2 = 1086 BytesProbier es aus
Erläuterung
quelle
-x
laut diesem Beitrag zwei Bytes zählen . Ich denke jedoch, Sie können ein Byte mit speichernò2_â1 o
(â
schließt die ursprüngliche Nummer aus, wenn ein Argument angegeben wird)â
Argument hinwies, bekam ich die Rettung, nach der ich gesucht hatte.õ Å
vor und fand ein paar 8- und 9-byters:õ Åx_/k g
,õ Åx_k Å×
,õ Åx_â¬o
. Und durch Kombinierenõ
undÅ
mit Ihrem genialenxo
Trick habe ich eine 7-Byte-Lösung gefunden :-)MATL, 12 Bytes
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
PHP , 56 Bytes
Probieren Sie es online!
quelle
Prolog (SWI) , 72 Bytes
Probieren Sie es online!
quelle
Cubix , 27
39BytesProbieren Sie es online!
Cubified
Beobachten Sie es laufen
0IU
Richten Sie den Stapel mit einem Akkumulator und der Start-Ganzzahl ein. Wende dich in die äußere Schleife:(?
Dupliziere die aktuelle Spitze des Stapels, dekrementiere und teste\pO@
Wenn der Würfel durch eine Nullschleife zu einem Spiegel geführt wird, greifen Sie nach dem Boden des Stapels, geben Sie ihn aus und halten Sie ihn an%\!
wenn positiv, mod, relect und test.u;.W
wenn es wahr ist, wende dich, entferne das Mod-Ergebnis und wechsle zurück in die innere SchleifeU;p+qu;;\(
Wenn Sie falsch liegen, wenden Sie, entfernen Sie das Mod-Ergebnis, bringen Sie den Akku nach oben, fügen Sie den aktuellen ganzzahligen (oberen) Divisor hinzu, und drehen Sie. Räumen Sie den Stapel auf, um nur Akkumulator und aktuelle Ganzzahl zu haben, dekrementieren Sie die Ganzzahl und geben Sie die äußere Schleife erneut ein.quelle
C # (.NET Core) ,
74 bis72 ByteProbieren Sie es online!
quelle
break
aufj=0
.Eigentlich 12 Bytes
Probieren Sie es online!
quelle
Python 3 ,
78 75 7371 BytesNicht einmal annähernd die Python-Antwort von Leaky Nonne in der Byteanzahl.
Probieren Sie es online!
quelle
Python 3 ,
696359 Bytes4 Bytes dank Dennis.
Probieren Sie es online!
Ich habe das Rekursionslimit auf 2000 gesetzt, damit dies für 1000 funktioniert.
quelle
Holzkohle , 37 Bytes
Probieren Sie es online!
Link ist zur ausführlichen Version. Ich habe fast den ganzen Tag gebraucht, um herauszufinden, wie ich eine Frage in Bezug auf Nicht-ASCII-Kunst in Charcoal lösen könnte, aber schließlich habe ich es verstanden und bin sehr stolz auf mich. :-D
Ja, ich bin mir sicher, dass man hier viel Golf spielen kann. Ich habe gerade meine C # -Antwort übersetzt und bin sicher, dass die Dinge in Charcoal anders gemacht werden können. Zumindest löst es den
1000
Fall in ein paar Sekunden ...quelle
Pari / GP ,
3630 BytesProbieren Sie es online!
quelle
Python 2 (PyPy) , 145 Bytes
Da es Spaß macht, Codegolfwettbewerbe in Wettbewerbe mit dem schnellsten Code umzuwandeln, gibt es hier einen O ( n ) -Algorithmus, der bei TIO n = 5.000.000.000 in 30 Sekunden löst . ( Dennis Sieb ist O ( n log n ).)
Probieren Sie es online!
Wie es funktioniert
Wir zählen die Größe des Sets
S = {( a , b ) | 2 ≤ a ≤ n , 2 ≤ b ≤ größter Eigenteiler ( a )},
durch Umschreiben als Vereinigung über alle Primzahlen p ≤ √n, von
S p = {( p ≤ d , b ) | 2 ≤ d ≤ n / p , 2 ≤ b ≤ d },
und unter Verwendung des Einschluss-Ausschluss-Prinzips :
| S | = ∑ (−1) m - 1 | S p 1 ≤ ≤ S p m | über m ≥ 1 und Primzahlen p 1 <⋯ < p m ≤ √n,
woher
S p 1 ∩ ⋯ ∩ S p m = {( p 1 ≤ p m ≤ e , b ) | 1 ≤ e ≤ n / ( p 1 ⋯ p m ), 2 ≤ b ≤ p 1 ⋯ p m - 1 e },
| S p 1 ≤ ≤ S p m | = ≤ n / ( p 1 ≤ p m ) ≤ ( p 1 ≤ p m- 1 ≤ (≤ n / ( p 1 ≤ p m ) ≤ + 1) - 2) / 2.
Die Summe hat C ⋅ n ungleich Null, wobei C gegen eine Konstante konvergiert, die wahrscheinlich 6 probably (1 - ln 2) / π 2 ≈ 0,186544 ist. Das Endergebnis ist dann | S | + n - 1.
quelle
NewStack , 5 Bytes
Zum Glück ist tatsächlich eine eingebaut.
Die Panne:
Im eigentlichen Englisch:
Lassen Sie uns ein Beispiel für eine Eingabe von 8 ausführen.
Nᵢ
: Liste der natürlichen Zahlen von 1 bis 8 erstellen:1, 2, 3, 4, 5, 6, 7, 8
;
: Berechnen Sie die größten Faktoren:1, 1, 1, 2, 1, 3, 1, 4
q
. Entfernen Sie das erste Element:1, 1, 2, 1, 3, 1, 4
Σ
Und nimm die Summe:1+1+2+1+3+1+4
=13
quelle
1+1+2+1+3+1+4
=13
nicht8
. Ansonsten: tolle Antwort also +1.Java 8,
787472 BytesPort von @CarlosAlejos C # Antwort.
Probieren Sie es hier aus.
Alte Antwort (78 Bytes):
Probieren Sie es hier aus.
Erklärung (der alten Antwort):
quelle
Lua , 74 Bytes
Probieren Sie es online!
quelle
J , 18 Bytes
Probieren Sie es online!
quelle
Gestapelt , 31 Bytes
Probieren Sie es online!(Alle Testfälle mit Ausnahme von 1000, bei denen das Online-Zeitlimit von 60 Sekunden überschritten wird.)
Erläuterung
quelle
C (gcc) , 53 Bytes
Probieren Sie es online!
Bequem und schnell alle Testfälle bestanden.
quelle