Geben Sie bei einer Ganzzahl n
die Anzahl der Möglichkeiten zurück, mit denen n als Liste von Primzahlen geschrieben werden kann. Zum Beispiel 2323
kann geschrieben werden (2,3,23)
, (23,23)
oder (2,3,2,3)
oder (23,2,3)
, so würden Sie Ausgang4
. Wenn es nicht auf diese Weise geschrieben werden kann, sollten Sie ausgeben0
.
Eine Primzahl wie 019
oder00000037
ist eine gültige Primzahl für dieses Problem.
Testfälle:
5 -> 1
55 -> 1
3593 -> 4 (359 and 3, or 3 and 593, or 3 and 59 and 3, or 3593)
3079 -> 2 (3 and 079, or 3079)
119 -> 0
5730000037 -> 7 (5,7,3,000003,7, 5,7,3,0000037, 5,73,000003,7, 5,73,0000037, 5,73000003,7, 5,7,30000037, 5730000037)
0-> undefined (you do not have to handle this case)
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes in jeder Sprache!
Edit: Jetzt weiß ich, warum ich das nächste Mal die Sandbox benutzen soll
code-golf
math
primes
set-partitions
manipulierten
quelle
quelle
Antworten:
Haskell ,
9689 Bytes5 Bytes gespart dank H.PWiz's Primalitätstest
Probieren Sie es online!
Erläuterung
Das erste, was getan wird, ist die Erstellung einer Primzahl-Testfunktion unter
Verwendung des Wilson-Theorems unterVerwendung der Definition von Primzahl.Beginnen Sie dann mit der Definition
f
. Das erste, was ich dachte, als ich dieses Problem sah, war die dynamische Programmierung. Die dynamische Programmierung kostet jedoch Byte, sodass ein Algorithmus für die "pseudodynamische Programmierung" verwendet wird. Während Sie in der dynamischen Programmierung einen gerichteten azyklischen Graphen im Speicher ablegen würden, verwenden wir hier nur die Rekursion und berechnen jeden Knoten jedes Mal neu, wenn wir ihn benötigen. Es verliert alle Zeitvorteile der dynamischen Programmierung, aber das ist Code-Golf , wen interessiert das? (Immer noch besser als Brute-Force-Suche)Der Algorithmus lautet wie folgt: Wir konstruieren einen gerichteten azyklischen Graphen L , wobei jeder Knoten eine Teilzeichenfolge der Zahl darstellt. Insbesondere repräsentiert L i die letzten i Ziffern unserer Eingabe (nennen wir es n ).
Wir definieren L 0 , um einen Wert von 1 zu haben, und jeden anderen Wert in L , um die Summe von jedem L j zu haben, so dass j <i und der Teilstring von n von i bis j eine Primzahl ist.
Oder in einer Formel:
Wir geben dann den Wert am größten größten Index von L zurück . ( L k wobei k die Anzahl der Stellen von n ist )
quelle
Gelee , 8 Bytes
Probieren Sie es online!
-1 Byte dank Leaky Nun
-1 Byte dank Dennis
Erläuterung
quelle
Brachylog , 10 Bytes
Probieren Sie es online!
Zuerst
ṫ
konvertiert die Eingabe in eine Zeichenfolge.{…}ᶜ
Zählt die Anzahl der möglichen Ausgänge für…
.Im Inneren wird
{…}
der Ausgang vonṫ
zugeführt~c
. Die Ausgabe dieses Prädikats entspricht in der Verkettung der Eingabe. Dies wirdịᵐ
eingegeben, was angibt, dass es sich bei der Ausgabe um die Eingabe handelt, wobei jeder String in eine Ganzzahl konvertiert wird.ṗᵐ
Gibt an, dass die Eingabe aus Primzahlen bestehtquelle
{~cṗᵐ}ᶜ
. Dies ist sehr langsam, da~c
bei ganzen Zahlen mit Constraint-Arithmetik gearbeitet wird, aber theoretisch funktioniert es.Pyth , 13 Bytes
Testsuite.
quelle
Python 2 ,
1059591 BytesDas ist sehr langsam.
Probieren Sie es online!
quelle
Python 2 , 161 Bytes
Probieren Sie es online!
Die Funktion
g
erstellt die Partitionen rekursiv (es wird eine Zeichenfolge als Eingabe verwendet, es wird jedoch eine Liste mit Ints-Listen ausgegeben). Der größte Teil des verbleibenden Codes besteht lediglich aus der Implementierung von 'isd
a prime?'.quelle
Gaia , 12 Bytes
Probieren Sie es online!
quelle
Sauber ,
199141131 BytesProbieren Sie es online!
quelle
J ,
6564 BytesProbieren Sie es online!
quelle
Pyth, 12 Bytes
Übernimmt Eingaben als Ganzzahl, gibt
True
oder ausFalse
Probieren Sie es online!
quelle