Was ist ein Prime Square?
Ein Prime Square ist ein Quadrat, bei dem alle vier Kanten unterschiedliche Primzahlen sind.
Aber welche?
Und wie bauen wir sie?
Hier ist ein Beispiel eines 4x4 Prime Square
1009
0 0
3 0
1021
Zuerst starten wir von der oberen linken Ecke. Wir arbeiten im Uhrzeigersinn .
Wir wählen die kleinste Primzahl mit 4
Ziffern, die 1009 ist .
Dann brauchen wir die kleinste Primzahl mit 4
Ziffern, die mit a beginnt 9
. Das ist 9001
Die dritte (4- 1
stellige ) Primzahl muss die letzte Ziffer sein (weil 9001 mit endet 1
)
und auch die kleinste 4-stellige Primzahl mit dieser Eigenschaft, die zuvor noch nicht als Kante verwendet wurde .
Diese Primzahl ist 1021
Die vierte Primzahl muss 4
Ziffern haben, die mit a beginnen 1
(da 1009 mit a beginnt 1
) und mit a enden1
(weil 1021 mit a beginnt 1
).
Die kleinste vierstellige Primzahl mit dieser Eigenschaft, die zuvor nicht als Kante verwendet wurde, ist 1031
Deine Aufgabe
Sie erhalten eine Ganzzahl n
von 3 to 100
Diese Zahl entspricht den Abmessungen des n x n
Quadrats.
Dann müssen Sie dieses Quadrat genau in Form der folgenden Testfälle ausgeben
Testfälle
n=3
Output
101
3 0
113
n=5
Output
10007
0 0
0 0
9 0
10061
n=7
Output
1000003
0 0
0 0
0 0
0 0
8 1
1000037
n=10
Output
1000000007
0 0
0 0
0 0
0 0
0 0
0 0
1 0
8 0
1000000021
n=20
Output
10000000000000000051
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
9 8
10000000000000000097
- Die Ein- und Ausgabe kann auf jede bequeme Weise erfolgen .
- Sie können es an STDOUT drucken oder als Funktionsergebnis zurückgeben.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Beliebig viel fremdes Leerzeichen ist zulässig, sofern die Zahlen richtig ausgerichtet sind
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
BEARBEITEN
Dies ist für alle möglich n
Hier sind die Primzahlen fürn=100
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000289
9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002191
Und für diejenigen unter Ihnen, die dies nicht für möglich halten , sind ALLE Testfälle aufgeführt
n
: P? Kein Problem mit der Herausforderung, nur neugierig.n
: Fürn
= 1 können wir die Bedingung nicht erfüllen, dass die vier Kanten unterschiedliche Primzahlen sind, währendn
wir für = 2 gezwungen sind, 11,13,23 zu wählen, an welchem Punkt sich die letzte Kante befindet 12, die zusammengesetzt ist. Ich habe keinen Beweis, dass es für allen
> 2 möglich ist, wäre aber schockiert, wenn ich etwas anderes erfahren würde: Informell gilt: Je mehr Ziffern es gibt, desto mehr Spielraum gibt es, um die Einschränkungen zu erfüllen.n
gibt es mindestens zwei Primzahlen,n
die mit 1 beginnen und mit jeder dieser Ziffern enden (daher können wir eine Unterkante auswählen), und es gibt mindestens drei Primzahlen, die mit 1 beginnen und mit 1 enden (daher können wir a auswählen) linke Ecke).Antworten:
05AB1E ,
646356534846 Bytes-1 Byte dank @ Mr.Xcoder
-5 Byte dank @Grimy .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie komprimiere ich große ganze Zahlen? ) An, um zu verstehen, warum dies so
Ž9¦
ist2460
. Und sehen Sie diese 05AB1E Spitze von mir zu verstehen , wie das Quadrat ausgegeben mit demΛ
eingebauten Leinwand.NĀiR}¦
I¯JŽ9¦SΛ
n=4
[1009,9001,1021,1031]
[1009,"001","201","301"]
Λ
I
¯J
"1009001201301"
n=4
Ž9¦S
[2,4,6,0]
[→,↓,←,↑]
quelle
4F°ÅP¯KIù.Δ1sЮθÅ¿Š®θÅ?Šθ)¯gè}©ˆ}ð¯2ô`€R«€¦J«Ž9¦SΛ
49:°ÅPIùć4FÐN1›iR}¦ˆθUKD.ΔÐθsXÅ?‚sXÅ¿ª¯gè]Ið¯J«Ž9¦SΛ
48:°ÅPIùćÐ4FˆθUKD.ΔÐθsXÅ?‚sXÅ¿ª¯gè}ÐNĀiR}¦}I¯JŽ9¦SΛ
ÐθsXÅ?‚sXÅ¿ª
zuθyXÅ?yXÅ¿)
.)
Ich bin mir nicht ganz sicher, warum das im Rahmen der Schleife funktioniert, da ich erwartet hätte, dass es die Primliste auch in der ersten Iteration in ihre Liste einwickelt. Aber auch ohne dass der Einsatzyy
stattÐss
spart noch 1 Byte. :)05AB1E ,
35333231 Bytes-1 Byte dank Kevin Cruijssen
Probieren Sie es online!
Erläuterung:
quelle
Θ
at entfernenNΘ
. Nur1
ist in 05AB1E wahr, soif N
undif N == 1
sind die gleichen.Θi
ist das 05AB1E-Äquivalent vonif (cond == true)
...Θ
kann immer noch nützlich sein, wenn Sie alles außer1
in konvertieren möchten0
. Aber für die if-Anweisungi
ist es nicht unbedingt notwendig, genau wie für Ihren Pseudocode mit== true
.JavaScript (ES8),
205 ... 185 177173 BytesTimeout bei TIO fürn > 8 wegen des sehr ineffizienten Primalitätstests.
Probieren Sie es online!
Wie?
Schritt 1: Berechnen der 4 Primzahlen
Schritt 2: Formatieren der Ausgabe
quelle
Jelly ,
8982 BytesProbieren Sie es online!
Könnte definitiv Golfspieler sein, arbeitet aber effizient für große Zahlen.
quelle
Jelly , 59 Bytes
Probieren Sie es online!
Kürzere, aber weniger effiziente Gelee-Antwort.
quelle
JavaScript, 484 Bytes
Die letzte unbenannte Funktion gibt die ASCII-Grafik zurück.
Originalcode
Beste und durchschnittliche Zeitkomplexität: Ω (100 n n) in Knuths Big-Omega-Notation (n Schritte zum Subtrahieren von n Ziffern, 10 n Subtraktionen pro Teilbarkeitsprüfung, 10 n Teilbarkeitsprüfung für die und Ω (1) Primitätsprüfungen durchgeführt ).
Schlechteste Zeitkomplexität: Ω (1000 n n) in Knuths Big-Omega-Notation (n Schritte zum Subtrahieren von n Ziffern, 10) n Subtraktionen pro Teilbarkeitsüberprüfung, 10 n Teilbarkeitsüberprüfung für Primzahlüberprüfung und 10 n prime Kontrollen getan).
Ich vermute
n=100
nimmt rund 10 203 Berechnungen.Nebenbei bemerkt: Ich habe die Syntax mit UglifyJS 3 validiert, und sie hat sich deutlich besser bewährt als ich. Das spart 47,13% mehr und bringt 282 Bytes ein. Ich habe mich jedoch entschieden, dieses Ergebnis nicht zu erzielen, da ich das Gefühl habe, dass es betrügt.
Es wurde nur die letzte Funktion gelöscht, da sie nie verwendet werden. Es wurde tatsächlich schlimmer, wenn es zugewiesen und nicht gelöscht wurde, einschließlich des zusätzlichen Codes, den ich hinzugefügt habe.
quelle