Definition
Eine quadratfreie Halbwertszeit ist eine natürliche Zahl, die das Produkt zweier unterschiedlicher Primzahlen ist.
Die Aufgabe
n
Zählen Sie bei einer natürlichen Zahl alle quadratfreien Halbzeiten kleiner oder gleich n
.
Einzelheiten
Bitte schreiben Sie eine Funktion oder Prozedur, die einen einzelnen ganzzahligen Parameter akzeptiert und alle quadratfreien Halbzeiten zählt, die kleiner oder gleich seinem Parameter sind. Die Zählung muss entweder ein Rückgabewert eines Funktionsaufrufs sein oder in STDOUT gedruckt werden.
Wertung
Die Antwort mit der geringsten Anzahl von Zeichen gewinnt.
Im Falle eines Unentschieden werden die folgenden Kriterien der Reihe nach verwendet:
Größte PersonBeste Zeitkomplexität
- Schlimmste Raumkomplexität
Beispiele
f(1) = 0
f(62) = 18
f(420) = 124
f(10000) = 2600
console.log
?Antworten:
J,
50403837 ZeichenVerwendungszweck:
Mit Dank an FUZxxl .
Leistungstest
Ich bin kein Theoretiker, wie hier in der Vergangenheit gesehen wurde, aber ich denke, die zeitliche Komplexität ist so etwas wie O (n p 2 ), wobei n p die Anzahl der Primzahlen bis einschließlich der Eingangszahl n ist. Dies basiert auf der Annahme, dass die Komplexität meiner Methode (Generieren einer sehr großen Multiplikationstabelle) die Komplexität der in J eingebauten Primgenerierungsfunktion bei weitem überwiegt.
Erläuterung
f=:3 :'...'
deklariert ein (monadisches) Verb (Funktion). Die Eingabe in das Verb wird durchy
die Verbdefinition dargestellt.p:i._1&p:y
Dasp:
Verb ist das Mehrzweck-Primzahlverb und wird hier auf zwei verschiedene Arten verwendet:_1&p:y
Gibt die Anzahl der Primzahlen zurück, die geringer sind als die, diey
dann fürp:i.
jede einzelne generiert werden. Verwendung von 10 als Eingabe:(~:/**/)~
generiert die Tabelle, von der ich zuvor gesprochen habe.*/
generiert eine Multiplikationstabelle,~:/
generiert eine ungleiche Tabelle (um die Quadrate zu eliminieren) und beide werden miteinander multipliziert. Verwenden Sie unsere vorherige Ausgabe als Eingabe:}.~.,
Jetzt verwandeln wir die Zahlen in eine Liste,,
erhalten die eindeutigen Werte~.
und entfernen die 0 am Anfang}.
y<:
ein Vergleich mit der ursprünglichen Eingabe, um zu überprüfen, welche Werte gültig sind:+/
und summiere das dann, um die Antwort zu erhalten.quelle
+/-.x<}.~.,(~:/~*[*/])p:i._1&p:[x=.n
wobei n die Eingabe ist.f=:3 :'+/-.y<}.~.,(~:/~*[*/])p:i._1&p:y'
für 40 Zeichen?3 :'...'
Mathematica
656455514739Code
Im Folgenden wird die Anzahl der quadratfreien Halbzeiten kleiner oder gleich gezählt
n
:Alle quadratfreien Semifrime-Faktoren in einer Struktur der Form:
{{p,1}{q,1}}
Zum Beispiel:Die Routine zählt einfach die Zahlen im gewünschten Bereich, die diese Struktur von Faktoren haben.
Verwendungszweck
Timing: Alle angegebenen Beispiele
Timing: n = 10 ^ 6
Es dauert weniger als vier Sekunden, um die Anzahl der quadratfreien Halbprimzahlen zu zählen, die kleiner oder gleich einer Million sind.
quelle
=
und nach dem,
tatsächlich syntaktisch benötigten?Python, 115
quelle
f=lambda x:sum([(i*j<=x)&p(j)&p(i)for i in r(2,x)for j in r(2,i)])
spart 5 Zeichen.itertools
in meinem Kopf.Gelee , 7 Bytes
Probieren Sie es online aus!
Wie es funktioniert
quelle
Python (139)
Bitte geben Sie einige Beispielergebnisse an, damit die Teilnehmer ihre Programme testen können.
quelle
Ruby 82
Demo: http://ideone.com/cnm1Z
quelle
Python 139
quelle
Golfscript 64
Online-Demo hier
Hinweis: In der obigen Demo habe ich die
420
und10000
Testfälle ausgeschlossen . Aufgrund des äußerst ineffizienten Primalitätstests ist es nicht möglich, das Programm für diese Eingaben in weniger als 5 Sekunden auszuführen.quelle
Shell, 40
Verwendungszweck:
quelle
Gelee ,
1413 BytesProbieren Sie es online aus!
Konstruktive Kritik erwünscht!
quelle
⁼
undS
kann in eine Verwendung vonċ
(Count) umgewandelt werden. Sie können damit bis zu 10 Bytes erreichen. Ich lasse dich es ausarbeiten!Python 2/3 ,
9594 BytesProbieren Sie es online aus!
Gepostet in einer 6 Jahre alten Herausforderung, weil es einen neuen Python-Rekord aufstellt, eine IMO, es ist ein ziemlich interessanter Ansatz.
Erläuterung
Python 2/3 (PyPy) ,
888281 BytesProbieren Sie es online aus!
Basierend auf einem 92-Byte-Golf von Value Ink. PyPy wird für die korrekte Interpretation benötigt
0or
, da Standard-Python dies als Versuch einer Oktalzahl ansieht.quelle
Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie diesen aus
quelle
Perl 6 ,
5845 BytesVielen Dank an Jo King für -13 Bytes.
Nutzt die Tatsache aus, dass ganze Zahlen mit vier Faktoren entweder quadratfreie Halbzeiten oder perfekte Würfel sind.
Probieren Sie es online aus!
quelle
Brachylog , 7 Bytes
Probieren Sie es online aus!
quelle
Netzhaut , 58 Bytes
Probieren Sie es online aus!
Nimmt als Eingabe unär mit
_
als StrichmarkierungErläuterung
Eine Zahl ist eine quadratfreie Halbprimzahl, wenn ihr größter und kleinster Faktor, mit Ausnahme von sich selbst und 1, beide Primzahlen sind.
Nimmt die Eingabe und generiert jede unäre Zahl, die kleiner oder gleich ist, jede in einer eigenen Zeile
Dann für jede Nummer ...
Finden Sie den kleinsten und größten Faktor, ohne sich selbst eine 1 ...
und zähle die Anzahl von ihnen, die Primzahl ist. Da der kleinste Faktor eine Primzahl sein muss, gibt dies 1 oder 2 zurück
Zählen Sie die Gesamtzahl der 2er
quelle
Python 2 ,
105104 BytesProbieren Sie es online aus!
1 Byte danke an Tintenfisch 🦑
quelle
(p*p)
kann seinp**2
Ruby
-rprime
, 64 BytesIch weiß, dass es hier eine andere Ruby-Lösung gibt, aber ich wollte sie nicht mit Kommentaren überhäufen, da sie 2012 beantwortet wurde ... und wie sich herausstellt, zählt die Verwendung eines Programmflags sie als eine andere Sprache , also denke ich das technisch ist sowieso nicht "Ruby".
Probieren Sie es online aus!
Erläuterung
quelle
APL (NARS), Zeichen 26, Bytes 52
Prüfung:
Dies ist eine längere Alternative (59 Zeichen, die ich bevorzugen würde)
Prüfung:
quelle