Diese Frage wurde mir in einem Interview gestellt, aber ich konnte keine Lösung finden. Ich weiß nicht, ob die Frage richtig war oder nicht. Ich habe viel versucht, konnte aber keine Lösung finden. Ehrlich gesagt kam mir nichts in den Sinn.
Rocco-Nummern
Eine positive ganze Zahl ist eine Rocco-Zahl, wenn sie entweder als oder , wobei eine Primzahl ist.
Die ersten 10 Rocco-Nummern sind:
Aufgabe
Ihr Code muss eine positive Ganzzahl als Eingabe akzeptieren und bestimmen, ob es sich um eine Rocco-Nummer handelt oder nicht.
Pluspunkte
- Schreiben Sie eine Funktion, die die Anzahl der Rocco-Zahlen kleiner oder gleich 1 Million berechnet und druckt.
- Schreiben Sie eine Funktion, die die Anzahl der Rocco-Zahlen aus der Bonusfrage (über einer) berechnet und druckt, die Primzahlen sind.
code-golf
decision-problem
number-theory
vijayscode
quelle
quelle
print 0
. Alle Rocco-Zahlen sind zusammengesetzt(n*..)
, also keine Primzahlen in irgendeinem Bereich.Antworten:
05AB1E , 8 Bytes
Gibt1 wenn n eine Rocco-Zahl ist, oder sonst 0 .
Probieren Sie es online!
Wie?
Bei einer positiven ganzen Zahln testen wir, ob ein Primfaktor p von existiertn so dass:
Kommentiert
quelle
JavaScript (ES7), 55 Byte
Probieren Sie es online!
Wie?
Gegeben eine positive ganze Zahln , wir suchen ein erstklassigen x , so daß x ( x + 14 ) = n oder x ( x - 14 ) = n .
Daher die folgenden quadratischen Gleichungen:
Die positive Wurzel von( 1 ) ist:
und die positive Wurzel von( 2 ) ist:
Daher ist das Problem gleichbedeutend mit dem Testen, ob entwederx0 oder x1 eine Primzahl ist.
Dazu verwenden wir die klassische Funktion für den rekursiven Primalitätstest und einen zusätzlichen Test, um sicherzustellen, dass keine Endlosschleife erfolgt, wenn als Eingabe eine irrationale Zahl angegeben wird.
Hauptverpackungsfunktion:
quelle
Perl 6 ,
4528 BytesProbieren Sie es online!
Erläuterung:
quelle
Regex (ECMAScript),
6462 BytesDies verwendet eine Variante des Multiplikationsalgorithmus, der kurz in einem Absatz meines Postings mit vielen regulären Zahlen beschrieben wird . Das ist ein Spoiler . So lesen keine weiteren , wenn Sie nicht einige erweiterte einstellige regex Magie für Sie verwöhnen wollen . Wenn Sie versuchen möchten, diese Magie selbst herauszufinden, empfehle ich dringend, zunächst einige Probleme in der Liste der in diesem früheren Beitrag mit Spoiler-Tags gekennzeichneten empfohlenen Probleme zu lösen und zu versuchen, die mathematischen Erkenntnisse unabhängig voneinander zu entwickeln.
Der Multiplikationsalgorithmus wird hier anders implementiert, weil wir annehmen, dass zwei bekannte Werte, die zusammen multipliziert werden, einem anderen bekannten Wert entsprechen (wie auch in der alternativen Version des regulären Ausdrucks in diesem Beitrag , um zu testen , ob eine Zahl ein perfektes Quadrat ist). In den meisten meiner bisherigen Antworten auf reguläre Ausdrücke wird die Multiplikation als Berechnung (begrifflich keine Behauptung) implementiert, bei der das Ziel darin besteht, das Produkt aus zwei bekannten Zahlen zu finden. Beide Methoden funktionieren unter beiden Umständen, aber in Bezug auf das Golfen sind sie schlechter, wenn sie sich gegenseitig unterstützen.
Probieren Sie es online!
quelle
Brachylog ,
1312 BytesGeben Sie die Kandidatennummer als Befehlszeilenargument ein. Ausgänge
true
oderfalse
. Probieren Sie es online!Erläuterung
Der Code ist ein Prädikat, dessen Eingabe nicht eingeschränkt ist und dessen Ausgabe die Zahl ist, die wir testen.
(Trinkgelder sind willkommen. Das
{+|-}
fühlt sich immer noch klobig an.)quelle
Brachylog , 9 Bytes
Anderer Ansatz als die Antwort von DLosc
N als Ausgabe nehmen, [P, P-14] oder [P + 14, P] durch Eingabe zurückgeben (größte Zahl zuerst)
Erläuterung
Probieren Sie es online!
quelle
Pyth,
22 bis20 BytesProbieren Sie es hier online aus .
Bearbeiten: Gespeicherte 3 Bytes als Eingabe sind immer positiv, sodass keine negativen Werte aus der Liste herausgefiltert werden müssen. Auch einen Fehler für die Eingänge festgelegt
1
und2
, kostet 1 Byte. Vorherige Version:}Qsm*Ld>#0+Ld_B14fP_TU
quelle
05AB1E ,
161514 Bytes1 Byte durch Berechnen von 14 mit
7·
anstelle vonžvÍ
(kann nicht glauben, dass ich nicht an erster Stelle darüber nachgedacht habe) gespeichert.Dank Emigna 1 Byte gespeichert
Probieren Sie es online! oder Alle Eingänge testen
Erläuterung
quelle
}˜så
,Q}Z
indem Sie die implizite Eingabe verwenden. Ihre Testsuite werden müßte ein bisschen so etwas wie verändert auf diese , um es dann zu arbeiten. Auch eine naheliegendere SchreibweisežvÍ
oder7·
wäre14
;)J ,
21-15BytesBasierend auf Arnauld's Lösung:
Probieren Sie es online!
Vorheriger Versuch:
Probieren Sie es online!
quelle
14 e.q:|@-]%q:
für 14 BytesRetina 0.8.2 , 61 Bytes
Probieren Sie es online! Erläuterung:
In Unary konvertieren.
\1
erfasst den größeren der beiden Faktoren.\2
erfasst die Konstante 14 und speichert ein Byte.\3
erfasst den kleineren der beiden Faktoren minus 1. Dies stellt auch sicher, dass beide Faktoren mindestens 2 sind.Überprüfen Sie die beiden Faktoren, um sicherzustellen, dass mindestens einer der Faktoren prim ist. Die Idee der Verwendung
\2?
wurde schamlos aus der Antwort von @ Deadcode gestohlen.Wiederholen Sie den größeren der beiden Faktoren so oft, bis er um eins niedriger ist als der kleinere der beiden Faktoren. Da wir den größeren Faktor bereits einmal erfasst haben, führt dies dazu, dass das Produkt der beiden Faktoren erfasst wird.
Stellen Sie sicher, dass das Produkt der angegebenen Anzahl entspricht.
Eine direkte Übersetzung in Retina 1 durch Ersetzen
$*
durch*1
hätte die gleiche Byteanzahl, aber ein Byte könnte durch Ersetzen aller1
s durch_
s gespeichert werden, und das*1
könnte dann durch*
anstatt ersetzt werden*_
. Vorherige Retina 1 Antwort für 68 Bytes:Probieren Sie es online! Erläuterung:
In Unary konvertieren.
Finden Sie alle Faktorenpaare.
Stellen Sie sicher, man ist prime.
Nehmen Sie den absoluten Unterschied.
Überprüfen Sie, ob 14 vorhanden sind.
quelle
JavaScript (Babel Node) , 69 Byte
Verdammt, ich dachte, ich würde Arnaulds 'Antwort besiegen, aber nein .....: c
Probieren Sie es online!
Ich möchte das
x=>[...Array(x)].some(
Teil mithilfe der Rekursion entfernen, damit es mit der Zeit kürzer wirdErläuterung
Es wird die Formel verwendet
quelle
Japt , 10 Bytes
Entspricht meiner Javascript-Antwort
Probieren Sie es online!
quelle
Gelee , 9 Bytes
Probieren Sie es online!
quelle
APL (NARS) 16 Zeichen, 32 Byte
{π⍵} würde die Faktorisierung seines Arguments finden und wir nehmen an, dass das letzte Element seines Ergebnisses (die Liste der Teiler von n) der maximale Primteiler von n ist; Hier nehmen wir an, dass eine äquivalente Definition der Rocco-Zahl ist: n ist eine Rocco-Zahl <=> Max-Faktor-Primzahl von n: r ist so, dass es wahr ist 14 = ∣rn ÷ r [für C Pseudocode als 14 == abs (rn / r) diese Definition der Rocco-Zahl scheint endlich im Bereich 1..1000000 in Ordnung zu sein]; der Bereich des ok-Wertes wäre 1..maxInt; Prüfung:
quelle
C # (Visual C # Interactive Compiler) , 99 Byte
Probieren Sie es online!
Enumerable.Range
schlägt wieder zu :) Mit der verrückten Compiler-Flagge kann man die Dinge ein wenig reduzieren, obwohl ich ein bisschen ein Fan der Vanille-Lösung bin.C # (Visual C # Interactive Compiler) + /u:System.Linq.Enumerable, 77 Byte
Probieren Sie es online!
Unten ist eine Portierung von Arnauld's Lösung, die ziemlich cool wirkte. Es ist derzeit das längste, aber es kann wahrscheinlich einige Golf gespielt werden.
C # (Visual C # Interactive Compiler) , 101 Byte
Probieren Sie es online!
quelle
APL (NARS) 30 Zeichen, 60 Byte
Hier ist 0π die Funktion sagen, wenn eine Zahl eine Primzahl ist, Test:
quelle
F #, 2 Antworten (nicht konkurrierend)
Die Antworten von @Arnauld haben mir sehr gut gefallen, deshalb habe ich sie übersetzt.
123 Bytes , basierend auf der JavaScript-Antwort
Erläuterung:
125 Bytes , basierend auf der 05AB1E-Antwort
Erläuterung:
quelle
Python 2 , 58 Bytes
Ausgabe nach Exit-Code, fail (
1
) für Rocco-Nummern.Probieren Sie es online!
quelle