Die Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die bei Übergabe einer numerischen Eingabe x
die Primzahlen unter der Quadratwurzel von x
1 ausgibt oder zurückgibt , die keine Faktoren von sind x
.
Beispiele
Sei f(x)
die aufgerufene Funktion:
>>> f(4)
[]
>>> f(5)
[2]
>>> f(20)
[3]
>>> f(60)
[7]
>>> f(100)
[3, 7]
>>> f(10000)
[3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Bonusregeln
- Sie können alle von Ihrer Sprache bereitgestellten integrierten Funktionen verwenden.
- Ihr Programm muss eine
x
Eingabe unterstützen, die so hoch ist wie die von Ihrer Sprache festgelegte Obergrenze.
1 Die Verwendung der Quadratwurzel als nur Primzahlen unterhalb der Quadratwurzel kann tatsächlich in die Faktoren von einbezogen werden x
. Ohne diese Einschränkung hätten größere Zahlen eine Menge überschüssiger gedruckter Zahlen.
x
" einbezogen werden, ist nicht wahr: Eine Zahl kann einen Primfaktor haben, der größer als ihre Quadratwurzel ist. In der Tat haben Ihre ersten beiden Beispiele (5 und 20) diese Eigenschaft, ebenso wie alle Primzahlen, zweimal alle ungeraden Primzahlen, ....Antworten:
Jelly, 6 Bytes in Jellys Codepage
Probieren Sie es online!
Erläuterung:
quelle
MATL ,
109 BytesProbieren Sie es online!
Erläuterung
quelle
Python 3 ,
6762 BytesProbieren Sie es online!
quelle
MATLAB,
5754 BytesZiemlich einfach, erhält eine Reihe von Primzahlen bis zu sqrt (p) und entfernt dann alle, die auch Faktoren von p sind. Druckt standardmäßig die Ausgabe der letzten Zeile, da das Semikolon weggelassen wird.
quelle
Pyth, 10 Bytes
Ein Programm, das eine Zahl eingibt und eine Liste druckt.
Testsuite
Wie es funktioniert
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
PHP, 76 Bytes
verwendet meine is_prime-Lösung für $ n> 1
Nimmt Eingaben vom Kommandozeilenargument entgegen. Laufen Sie mit
-r
.quelle
Mathematica, 46 Bytes
Anonyme Funktion. Nimmt eine Zahl als Eingabe und gibt eine Liste von Zahlen als Ausgabe zurück. Das Unicode-Zeichen ist U + 2223 DIVIDES für
\[Divides]
.quelle
Ruby, 55 Bytes
Eine eher faule Antwort mit dem eingebauten Primenzähler.
quelle
Wunder , 14 Bytes
Verwendung:
Nimmt Elemente aus einer unendlichen Liste von Primzahlen, während das Element kleiner als die Quadratwurzel des Arguments ist.
quelle
Pyke, 10 Bytes
Probieren Sie es hier aus!
quelle
PowerShell v2 +, 71 Byte
Iterative Lösung. Übernimmt Eingaben
$n
und erstellt einen Bereich von1
bisSqrt($n)
(der Bereichsoperator setzt implizit das obere Ende auf einen[int]
Wert, der standardmäßig die Bankerrundung ausführt). Verwendet dann|?{...}
(derWhere-Object
Bedienungsperson , die sich wie ein Filter wirkt) , um diese Zahlen herausziehen , wo$n%$_
nicht Null ist (dh jeder Rest den modulo Mitteln ist es kein Faktor, und jeder Nicht-Null ist truthy)-and
die üblichen regex prime Test ist$true
. Diese verbleiben in der Pipeline, und die Ausgabe ist implizit.Beispiele
(Mit etwas zusätzlicher Formatierung, um die Ausgabe zu verbessern)
NB - Dies schlägt in früheren Versionen fehl, wenn die Eingabe größer als ungefähr ist
2500000000
, da der..
Bereichsoperator nur bis zu 50.000 Elemente unterstützen kann. Da dies jedoch größer ist als der[int]
Maximalwert des Standarddatentyps2147483647
, gehe ich davon aus, dass dies in Ordnung ist. Auf meinem Computer, PSv4 Win8.1, kann ich zwar eine höhere Version verwenden, aber keine Dokumentation finden, die den Unterschied erklärt.quelle
JavaScript (ES6),
7976 BytesBasierend auf meiner rekursiven Primalitätstestfunktion . Ich bin der Meinung, dass es ein paar Möglichkeiten geben sollte, dies zu vereinfachen, aber ich kann nicht herausfinden, wie ...
Testschnipsel
quelle
Oktave, 44 Bytes
Diese Antwort ist von der MATLAB-Antwort von MattWH inspiriert , aber ich habe sie mit einigen Octave-spezifischen Funktionen gespielt.
Dies ist eine anonyme Funktion, die die Eingabe übernimmt
x
. Octave verfügt über eine Inline-Variablenzuweisung und -Indizierung, die es ermöglichty
, zuerst in der Funktion erstellt zu werden (in MATLAB nicht möglich) und dann als Teil der von erstellten logischen Maske verwendet zu werdenismember
(in MATLAB ebenfalls nicht möglich).quelle
Perl 6 , 37 Bytes
Erweitert:
quelle
TSQL, 130 Bytes
Dies wird nur einmal ausgeführt. Anschließend müssen Sie die temporäre Tabelle löschen, um sie erneut im selben Editor auszuführen
Ich habe eine Testversion erstellt, die etwas länger ist, da die Online-Berechtigungen zum Erstellen von Tabellen nicht verfügbar sind. Aus dem gleichen Grund wird die Drop-Tabelle jedoch nicht benötigt.
Probieren Sie es online aus
quelle
R
5863 BytesDurchläuft alle Werte von 2 bis
sqrt(x)
und prüft, ob sie mit demnumbers
Paket übereinstimmen .x%%i
berechnet,x mod i
welches ist,0 -> False
wenni
ein Teiler vonx
und>0 -> True
wenn isti
nicht.+5 Bytes, da die
numbers::Primes(n)
Funktion keine Dezimalstellen zulässt, während2:sqrt(x)
dies funktioniertif
. Der Anweisung wurde eine Primzahlprüfung hinzugefügt .quelle
Haskell,
5554 BytesMeist einfaches Verständnis von verschachtelten Listen. GCD führt zwei Rollen aus, indem es prüft, ob die Zahlen unter y Faktoren von y sind und ob y ein Faktor von x ist.
Ein wenig Abstand:
quelle
gcd(z*x)y>1
.Retina ,
6966 BytesDruckt die Primzahlen in separaten Zeilen vom größten zum kleinsten.
Probieren Sie es online! (Dauert aufgrund der letzten beiden Testfälle ca. 10 Sekunden. Kopf- und Fußzeile ermöglichen eine Testsuite mit Zeilenvorschub und konvertieren die Ausgabe zur besseren Lesbarkeit in Kommatrennung.)
Erläuterung
Konvertieren Sie die Eingabe in Unary.
Dies stellt die Quadratwurzel der Eingabe voran, getrennt durch
:
. Die Quadratwurzel wird basierend auf der Tatsache berechnet, dass das Quadrat vonn
auch die Summe der erstenn
ungeraden ganzen Zahlen ist. Wir können aufeinanderfolgende ungerade ganze Zahlen mit der Vorwärtsreferenz abgleichen(11\1|^1)
. Dabei wird die Gruppe genaun
mal benutzt, won
es die größte Zahl ist, deren Quadrat in die Eingabe passt.Wir fügen eine unäre Darstellung dieser Zahl mit ein
$#1$*1
, gefolgt von einem Doppelpunkt und der Übereinstimmung selbst.Dies entspricht allen fehlenden Primzahlen, die in die Quadratwurzel passen. Die Primerkennung basiert auf dem regulären regulären Ausdruck für die Primprüfung , und dann stellen wir einfach sicher, dass die soeben erfasste Primzahl die Eingabe nicht durch den zweiten Lookahead teilt. Mit dieser
&
Option erhalten wir überlappende Übereinstimmungen, um sicherzustellen, dass wir alle Primzahlen erhalten.Dies konvertiert jede Zeile (dh jedes fehlende Primzeichen) zurück in eine Dezimalzahl, indem es der Anzahl von
1
s entspricht. Das einzige Problem ist, dass dies eine Null einfügt, wenn überhaupt keine fehlenden Primzahlen gefunden wurden.Diese Stufe entfernt also diese Null, wenn sie hinzugefügt wurde.
quelle