Eine meiner Lieblingsdefinitionen der Primzahlen lautet:
2 ist die kleinste Primzahl.
Zahlen größer als 2 sind Primzahlen, wenn sie nicht durch eine kleinere Primzahl teilbar sind.
Wie auch immer diese Definition willkürlich erscheint, warum 2? Warum nicht eine andere Nummer? Versuchen wir es mit einigen anderen Zahlen, die n-Primzahlen definieren
n ist die kleinste n-Primzahl.
Zahlen größer als n sind n-Primzahlen, wenn sie nicht durch eine kleinere n-Primzahl teilbar sind.
Aufgabe
Die Aufgabe hier ist es, ein Programm zu schreiben, das zwei Eingaben annimmt, eine positive ganze Zahl n und eine positive ganze Zahl a . Es wird dann entscheiden , ob eine ist n -Prime. Ihr Programm sollte zwei unterschiedliche Werte ausgeben, einen für "Ja, es ist n-prim" und einen für "Nein, es ist nicht n-prim".
Dies ist eine Code-Golf-Frage, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Tests
Hier sind Listen der ersten 31 Primzahlen für n = 2 bis n = 12 (1 ist die einzige 1-Primzahl)
n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]
quelle
n=6, a=15
ist der erste interessante Testfall.Antworten:
Haskell , 45 Bytes
Probieren Sie es online!
Ich definiere eine nette rekursive Funktion
(!)
:n!a
prüft, ob ein Faktora
in dem Bereich[n,a-1]
ein istn-prime
. Dann wird das Ergebnis negiert. Es stellt auch sicher, dassn>a
quelle
Python 2 ,
3937 BytesVielen Dank an Halvard Hummel für -2 Bytes.
Probieren Sie es online!
quelle
Python 3 , 45 Bytes
Probieren Sie es online!
Wie es funktioniert
Dies nimmt zwei ganze Zahlen als Eingabe, i und k . Zuerst wird geprüft, ob k ≥ i ist . Erzeugt dann den Bereich [i, k) und für jede ganze Zahl N in diesem Bereich liegt, wird geprüft , ob N teilerfremd ist zu k . Sind beide Bedingungen erfüllt, so ist k ein i -Prom.
quelle
&
anstelle vonand
und>=i
anstelle von verwenden>i-1
?>=i
ist immer noch 4 Bytes (wegen des Speicherplatzes).&
brauchen Sie keinen Platz.Schale ,
65 BytesProbieren Sie es online! oder sehen Ergebnisse bis zu 80 .
Danke an Leo für -1 Byte.
Erläuterung
quelle
R ,
4437 BytesProbieren Sie es online!
-7 Bytes dank Giuseppe
Gibt zurück,
TRUE
wenna
ist gleichn
oder (a==n|
)a
ist größer alsn
und (a>n&
) für jede Zahl k vonn
bisa-1
,a
ist nicht gleichmäßig teilbar durch k (all(a%%n:(a-1))
)Kehrt
FALSE
sonst zurückquelle
J, 30 Bytes
Probieren Sie es online!
Nimmt den Startwert als rechtes Argument und den zu überprüfenden Wert als linkes Argument.
Ursprünglich habe ich alles durcheinander gebracht und nicht weniger als die Start-Primzahl für übrige Argumente verantwortlich gemacht. Ich bin jetzt etwas unzufrieden mit der Länge meiner Lösung.
Erläuterung
Sei
x
das linke Argument (der zu prüfende Wert) undy
sei das rechte Argument (der Startprimus).Anmerkungen
Das Element an Position
x-y
ist das Ergebnis des Primärtests fürx
(da wiry
den ursprünglichen Bereich erweitert haben).Das Multiplizieren mit
x >: y
stellt sicher, dass wir einen Falsey-Wert (0
) fürx
weniger als erhalteny
.quelle
JavaScript (ES6),
333230 ByteÜbernimmt Eingaben in der Currying-Syntax
(n)(a)
. Gibt einen Booleschen Wert zurück.Demo
Code-Snippet anzeigen
quelle
Haskell , 30 Bytes
Dank der Idee von H.PWiz, die aus der Antwort von flawr entlehnt wurde, konnten 2 Byte eingespart werden
Probieren Sie es online!
Ok, seit einiger Zeit, und die einzige Antwort von Haskell sind 45 Btyes. Ich habe beschlossen, meine eigene Antwort zu posten.
Erläuterung
Diese Funktion prüft, ob die einzige Zahl zwischen n und a , durch die a teilbar ist, a ist selbst ist.
Jetzt werden in der Definition nur n- Zeiten kleiner als a erwähnt . Warum überprüfen wir also alle diese zusätzlichen Zahlen? Haben wir keine Probleme, wenn a durch ein n- Komposit größer als n teilbar ist ?
Wir werden es nicht tun, denn wenn es ein n- Komposit gibt, das größer als n ist , muss es per Definition durch ein kleineres n- Prime teilbar sein . Wenn also a geteilt wird , muss das kleinere n -Prom sein.
Wenn a kleiner als n
[n..a]
ist,[]
kann dies nicht dazu führen,[1]
dass die Prüfung fehlschlägt.quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle
Pip ,
231914 BytesDie kürzeste Methode ist eine Portierung von Mr. Xcoders Python-Antwort . Nimmt die kleinste Primzahl und die zu testende Zahl als Befehlszeilenargumente. Probieren Sie es online!
quelle
C 55 Bytes
Probieren Sie es online!
53 Bytes, wenn mehrere wahrheitsgemäße Rückgabewerte zulässig sind:
Probieren Sie es online!
quelle
Gleichstrom ,
403437 BytesIch hätte einen TIO-Link eingefügt, aber TIO scheint eine fehlerhafte Distribution zu haben
dc
, da es so funktioniert, wie es auf meinem System beabsichtigt ist, aber derQ
Befehl auf TIO fehlerhaft funktioniert. Stattdessen finden Sie hier einen Link zu einembash
Testgelände mit einer korrekt funktionierenden Version vondc
:Demo It!
quelle
APL (Dyalog) , 24 Bytes
Probieren Sie es online!
Wie?
⍳⍵
-1
bisa
o←⍺↓
-n
bisa
, speichern biso
o|⍨⊂o
- Modulo jedes Element ino
mit jedem Element ino
0=
- Überprüfen Sie, wo es gleich ist0
(dividiert)+/¨
- Summiere die Anzahl der Unterteilungen1=
- Wenn wir nur eine haben, wird die Zahl nur durch sich selbst geteilto/⍨
- Also behalten wir diese Vorkommnisse⍵∊
- Ista
in diesem Restarray?quelle
JavaScript (Node.js) , 27 Byte
Probieren Sie es online!
Port meiner Python-Antwort, nimmt Eingaben in der aktuellen Syntax vor:
m(number)(first prime)
quelle
JavaScript ES5, 34 Bytes
quelle
Add ++ , 20 Bytes
Probieren Sie es online!
quelle