Einführung
Die Primzahlfunktion , die auch als Pi-Funktion , gibt die Anzahl der Primzahlen kleiner oder gleich x zurück.
Herausforderung
Ihr Programm verwendet eine Ganzzahl x, die Sie als positiv annehmen können, und gibt eine einzelne Ganzzahl aus, die der Anzahl der Primzahlen kleiner oder gleich x entspricht. Dies ist eine Code-Golf- Herausforderung, daher wird der Gewinner das Programm mit den wenigsten Bytes sein.
Sie können eine beliebige Sprache Ihrer Wahl verwenden, sofern diese vor Beginn dieser Herausforderung vorhanden war. Wenn die Sprache jedoch über eine integrierte Primzahlfunktion oder eine Primalitätsprüffunktion (z. B. Mathematica) verfügt, kann diese Funktion in Ihrem Code nicht verwendet werden .
Beispieleingaben
Eingabe:
1
Ausgabe:
0
Eingabe:
2
Ausgabe:
1
Eingabe:
5
Ausgabe:
3
Antworten:
05AB1E , 3 Bytes
Dies setzt voraus, dass eingebaute Faktorisierungsfunktionen zulässig sind. Probieren Sie es online!
Wie es funktioniert
quelle
Python 2, 45 Bytes
Verwendet den Wilson's Theorem Prime Generator. Das Produkt
p
verfolgt(k-1)!^2
undp%k
ist 1 für Primzahlen und 0 für Nicht-Primzahlen.quelle
MATL ,
11, 10, 8, 5 BytesProbieren Sie es online!
Ich habe eine Version geschrieben, die wirklich cool erklärt, wie MATLs Matrizen funktionieren:
:YF!s1=1
Aber es ist nicht mehr relevant. Sehen Sie sich den Revisionsverlauf an, wenn Sie ihn sehen möchten.
Neue Erklärung:
Drei Bytes gespart dank Dennis 'genialer Lösung
quelle
YF!s1=s
Gelee ,
85 Bytes3 Bytes gespart dank @Dennis!
Probieren Sie es online!
Port von DJMcMayhem's MATL-Antwort (frühere Version), verfeinert von Dennis.
quelle
ÆE
, da jeder Exponent einem anderen Primfaktor entspricht.RÆESL
erreicht genau das.!ÆEL
wäre noch kürzer.MediaWiki-Vorlagen mit ParserFunctions , 220 + 19 = 239 Byte
So rufen Sie die Vorlage auf:
Arrangiert im Lisp-Stil:
Nur ein einfacher Primalitätstest von 2 bis n . Die Zahlen mit drei Klammern um ihnen die Variablen sind, wo
{{{1}}}
ist n ,{{{2}}}
ist die Zahl, getestet wird ,{{{3}}}
ist der Faktor zu überprüfen.quelle
Perl, 33 Bytes
Beinhaltet +1 für
-p
Geben Sie die Eingangsnummer bei STDIN ein
primecount.pl
Gibt das falsche Ergebnis für an,
0
aber das ist in Ordnung, die Operation bat nur um Unterstützung für positive ganze Zahlen.quelle
Retina, 31 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus. Konvertieren Sie die Eingabe in unär, und generieren Sie den Bereich von
1
bis fürn
jede Zeile. Bringe die Primzahlen zusammen.Probieren Sie es online aus - Eingabe viel größer als 2800, entweder zeitlich begrenzt oder nicht genügend Arbeitsspeicher.
Verweise:
Martins Entfernungsmesser
Martins Prime Checker
quelle
Gelee , 3 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Jelly ,
13 11 10 9 8 76 BytesKeine eingebauten Prim-Funktionen verwenden
-1 Byte dank @miles (eine Tabelle verwenden)
-1 Byte dank @Dennis (von unary konvertieren, um die Divisoren hochzuzählen)
TryItOnline
Oder sehen Sie sich die ersten 100 Begriffe der Reihe an
n=[1,100]
, auch bei TryItOnlineWie?
quelle
%þ`¬Sċ2
.ḍþḅ1ċ2
Speichert ein Byte.JavaScript (ES6),
4543 ByteEine Modifikation meiner
363533-Byte-Primalitätsfunktion (1 Byte gespeichert von @Neil, 2 von @Arnauld):(Ich kann das nirgendwo posten, weil Ist diese Nummer eine Primzahl? Akzeptiert nur vollständige Programme ...)
Testschnipsel
Code-Snippet anzeigen
quelle
&
mitten in Ihrer Primalitätsfunktion mit einer davonkommen .PowerShell v2 +, 98 Byte
Achtung: Dies ist bei großen Eingaben langsam .
Grundsätzlich die unary-basierte Suche von Ist diese Zahl eine Primzahl? , gekoppelt mit einer
for
Schleife und einem$j++
Zähler. Ein wenig zusätzliche Logik auf der Vorderseite, um die Eingabe von Kantenfällen zu berücksichtigen1
und2
aufgrund der Funktionsweise der Zaunpfosten in denfor
Schleifen.quelle
05AB1E , 5 Bytes
Nimmt an, dass eingebaute Primfaktoren zulässig sind.
Code:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
ÅPg
Ist es das, was es jetzt sein würde?CJam , 7 Bytes
Probieren Sie es online! Verwendet eine Faktorisierungsfunktion.
Erläuterung:
quelle
Gelee , 6 Bytes
Hierbei werden nur die Grundrechenarten und der Satz von Wilson verwendet. Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
C # 5.0
7877Ungolfed
quelle
Pyth -
76 BytesDa andere Primfaktorisierungsfunktionen verwenden ...
Test Suite .
quelle
Bash + Coreutils, 30
Ideone.
Bash + Coreutils + BSD-Spielepaket, 22
Diese kürzere Antwort erfordert , dass Sie das bsdgames Paket installiert sein :
sudo apt install bsdgames
.quelle
Pyke,
86 BytesProbieren Sie es hier aus!
Vielen Dank an Maltysen für den neuen Algorithmus
quelle
C #, 157 Bytes
Volles Programm mit Testfällen:
Beginnt eine Weile zu dauern, sobald Sie über 1 Million gehen.
quelle
Matlab, 60 Bytes
Fortsetzung meiner Einstellung zu einzeiligen Matlab-Funktionen. Ohne eingebaute Faktorisierung:
Vorausgesetzt, eine Primzahl
y
hat nur zwei Faktoren[1,y]
: Wir zählen die Zahlen im Bereich[1,x]
, die nur zwei Faktoren haben.Die Verwendung der Faktorisierung ermöglicht eine signifikante Verkürzung (bis zu 46 Byte).
Fazit: Müssen in sie Golf Sprachen suchen: D
quelle
Eigentlich 10 Bytes
Dies war die kürzeste Lösung, die ich gefunden habe und die bei TIO nicht auf Interpreter-Bugs gestoßen ist. Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
Gelee , 3 Bytes
Jelly hat eine eingebaute Funktion zum Zählen von Primzahlen
ÆC
und eine Funktion zum Prüfen von Primzahlen.ÆP
Stattdessen wird eine eingebaute Funktion zum Erzeugen von Primzahlen verwendetÆR
und die Länge ermitteltL
.Ich denke, dies ist ungefähr so grenzwertig wie die Verwendung von eingebauten Primfaktoren, die auch 3 Bytes mit
!Æv
(!
Fakultät,Æv
Primfaktoren zählen) benötigen würden.quelle
PHP,
9692 Bytes4 Bytes gespart dank Roman Gräf
Online testen
Ungolfed-Testcode:
Online testen
quelle
isInt(...)?1:0
und nicht nurisInt(...)
APL (Dyalog Unicode) , 13 Byte SBCS
Probieren Sie es online!
⍳
ɩ ndices 1 ... N⧽
∘.|
Rest-Tabelle (die zwei als Achsen verwenden)⍳
ɩ ndices 1 ... N0+.=
die Summe der Elemente gleich Null (dh wie viele Teiler hat jeder)2+.=
die Summe der Elemente gleich zwei (dh wie viele Primzahlen gibt es)quelle
Python 3, 40 Bytes
Eine ungerade ganze Zahl k ist eine Primzahl, wenn nur 2 ** (k - 1) zu 1 mod k kongruent ist. Wir überprüfen also nur diese Bedingung und addieren 1 für den Fall von k = 2.
quelle
MATL , 9 Bytes
Dies vermeidet eine Zersetzung des Primfaktors. Seine Komplexität ist O ( n ²).
Probieren Sie es online!
quelle
JavaScript (ES6),
50 + 246 + 243 Bytes35 Bytes gespart dank Neil:eval
kann auf denn
Parameter zugreifen .Das
eval(...)
prüft, obn
Prime ist.Vorherige Lösungen: Die
Byteanzahl sollte +2 sein, da ich vergessen habe, die Funktion zu benennen
f=
(für die Rekursion erforderlich)46 + 2 Bytes (3 Bytes dank ETHproductions eingespart):
50 + 2 Bytes:
quelle
eval
können Sie auf denn
Parameter Ihrer Funktion zugreifen (den Sie vergessen haben und der 2 Bytes kostet; es ist gut zu wissen, dass ich nicht der einzige bin, der diesen Fehler begeht), der Ihnen 5 Bytes erspart.eval
. Getestet mit Firefox, Chrome und Edge hat es bei mir geklappt. Die Erklärung ist eval () analysiert im Anweisungskontext . Zwei Beispiele:a=12;f=b=>eval('a + 5');f(8)
Displays17
unda=12;f=a=>eval('a + 5');f(8)
Displays13
.Java 7.102 Bytes
Rohe Gewalt
Ungolfed
quelle
1
. Es kehrt derzeit1
statt0
. Sie können dieses Problem beheben , indem Sie entweder Wechselreturn c;
zureturn n<2?0:c;
oder ändern,c=1,
zu,c=n<2?0:1,
.q 35 Bytes
quelle
Eigentlich 10 Bytes
Wenn für meine erste tatsächliche Antwort die Verwendung einer Funktion zur Erzeugung von Primzahlen nicht zulässig ist, ist hier eine Ersatzantwort unter Verwendung des Wilson-Theorems. Golfvorschläge sind willkommen. Probieren Sie es online!
Probieren Sie es online aus
quelle