Sie haben den Tag mit Ihrem Prim-Sequence-Code gerettet , und der Mathematiklehrer war begeistert. So sehr, dass der Bibliothekar (a / k / a, Ihr Chef) vor eine neue Herausforderung gestellt wurde. Herzlichen Glückwunsch, Sie können die Lösung codieren, damit der Bibliothekar den Mathematiklehrer erneut beeindrucken kann.
Beginnen Sie mit der Folge natürlicher Zahlen in Basis 10, N
0, 1, 2, 3, 4, 5, 6 ...
Ohne 0
und 1
ist jede Zahl in dieser Folge entweder eine Primzahl, P
2, 3, 5, 7, 11, 13 ...
oder zusammengesetzt, C
4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20 ...
Der Mathematiklehrer dachte darüber nach, wie der Bibliothekar dachte, eine Ganzzahl in die Dezimalerweiterung einer Zahl aus P einzufügen , und erstellte stattdessen eine Funktion G (x, y) , die eine Zahl x
aus N mit 1 <= x <= 9
und eine Zahl y
aus C nimmt und x
in die einfügt Dezimalerweiterung y
in jeder Position, von links nach rechts, wobei nur eindeutige Zahlen ausgewählt werden.
Zum Beispiel G (3,14) ist 314, 134, 143
. Allerdings G (1.14) ist nur 114, 141
als ob Sie voranstellen oder Einsatz der 1
in 14
die gleiche Anzahl 114
erzeugt.
Der Mathematiklehrer fragte sich, wie oft Sie diese Permutationen durchführen müssten, bevor Sie eine Zahl in P erhalten , wenn Sie x
in aufsteigender Reihenfolge vorgehen. Der Mathematiklehrer nannte dies den Composite-Prime-Index einer Zahl und schrieb ihn als CPI (y) .
Zum Beispiel 4
muss nur zweimal getan werden: 14, 41
Da 41
Primzahl ist, so CPI (4) ist 2
. Allerdings 8
muss 6 mal durchgeführt werden, 18, 81, 28, 82, 38, 83
vor dem Erreichen 83
als Primzahl, so CPI (8) ist 6
.
Ihre Aufgabe ist es, Code zu schreiben, der diesen Composite-Prime-Index mit einer eingegebenen Nummer ausgibt .
Eingang
- Eine einzelne Ganzzahl
y
, z. B.y
in C , die über das Funktionsargument STDIN oder ein Äquivalent eingegeben wird. - Für die Zwecke der Berechnung können Sie davon ausgehen
y
, dass sie in die üblichen ganzzahligen Bereiche passen (z. B. 2 31 -1 als Obergrenze annehmen ). - Verhalten für
y
nicht in C ist undefiniert.
Ausgabe
Der sich ergebende Composite-Prime-Index , der wie oben beschrieben berechnet wurde, wird mit zwei Ausnahmen an STDOUT oder einen gleichwertigen Index ausgegeben:
- Wenn die allerletzte Permutation (dh das Anhängen
9
any
) diejenige ist, die zu einer Primzahl führt, wird ausgegeben-1
. Ein Beispiel, das unten erweitert wird, isty=14
. - Wenn es keine Permutation gibt (dh G (x, y) ist eine Teilmenge von C für alle
1 <= x <= 9
), wird ausgegeben0
. Ein Beispiel, das unten erweitert wird, isty=20
.
Beispiele
y -> operations : output
4 -> 14, 41 : 2
6 -> 16, 61 : 2
8 -> 18, 81, 28, 82, 38, 83 : 6
9 -> 19 : 1
10 -> 110, 101 : 2
12 -> 112, 121, 212, 122, 312, 132, 123, 412, 142, 124, 512, 152, 125, 612, 162, 126, 712, 172, 127 : 19
14 -> 114, 141, 214, 124, 142, 314, 134, 143, 414, 144, 514, 154, 145, 614, 164, 146, 714, 174, 147, 814, 184, 148, 914, 194, 149 : -1
15 -> 115, 151 : 2
16 -> 116, 161, 216, 126, 162, 316, 136, 163 : 8
18 -> 118, 181 : 2
20 -> 120, 210, 201, 220, 202, 320, 230, 203, 420, 240, 204, 520, 250, 205, 620, 260, 206, 720, 270, 207, 820, 280, 208, 920, 290, 209 : 0
Beschränkungen
- Dies ist Codegolf, da Sie dies auf eine Karteikarte übertragen müssen, damit der Bibliothekar dem Mathematiklehrer zeigen kann, und Ihre Hand verkrampft sich leicht.
- Es gelten die üblichen Lückenbeschränkungen. Der Bibliothekar toleriert keine Betrüger.
19
Primzahl, sollte die Ausgabe also nicht 1 sein?Antworten:
Pyth, 35 Bytes
Testsuite
quelle
Haskell,
166161 BytesAnwendungsbeispiele:
f "8"
->6
,f "14"
->-1
,f "20"
->0
.So funktioniert es:
p
Ist der Primalitätstest (gestohlen aus @ Mauris Antwort in einer anderen Herausforderung).q
Ein Wrapperp
zum Konvertieren von Typen von Strings in Integer.n # c
fügtc
an jeder Stelle inn
.%
Nimmt eine Liste von Zahlen und einen Indexi
. Wenn das erste Element der Liste Primzahl ist, kehren Sie zurücki
, andernfalls wiederholen Sie mit dem Ende der Liste undi+1
. Stoppen Sie, wenn ein einzelnes Element übrig ist, und kehren-1
Sie zurück, wenn es prim und ist0
sonst ist.quelle
Minkolang 0,11 , 85 Bytes
Probieren Sie es hier aus.
Erklärung (in Kürze)
quelle
Javascript, 324 Bytes
Wenn y nicht in C ist, ist die STDOUT-Ausgabe leer.
Erläuterung
quelle
n%c!=0
mitn%c
;c>=n-1
mitc>n-2
; undx==9
mitx-9
?