Redivosite ist ein Wort, das nur zum Zweck dieser Herausforderung erfunden wurde. Es ist eine Mischung aus Reduktion, Division und Composite.
Definition
Gegeben eine ganze Zahl N> 6 :
- Wenn N eine Primzahl ist, ist N keine Redivosite-Zahl.
- Wenn N zusammengesetzt ist:
- Berechne wiederholt N '= N / d + d + 1, bis N' eine Primzahl ist, wobei d der kleinste Teiler von N größer als 1 ist
- N ist genau dann eine Redivosite-Zahl, wenn der Endwert von N ' ein Teiler von N ist
Nachfolgend die 100 ersten Redivosite Numbers (kein OEIS-Eintrag zum Zeitpunkt der Veröffentlichung):
14,42,44,49,66,70,143,153,168,169,176,195,204,260,287,294,322,350,414,462,518,553,572,575,592,629,651,702,726,735,775,806,850,869,889,891,913,950,1014,1023,1027,1071,1118,1173,1177,1197,1221,1235,1254,1260,1302,1364,1403,1430,1441,1554,1598,1610,1615,1628,1650,1673,1683,1687,1690,1703,1710,1736,1771,1840,1957,1974,2046,2067,2139,2196,2231,2254,2257,2288,2310,2318,2353,2392,2409,2432,2480,2522,2544,2635,2640,2650,2652,2684,2717,2758,2760,2784,2822,2835
Beispiele
- N = 13 : 13 ist Primzahl, daher ist 13 keine Redivosite-Zahl
- N = 32 : 32/2 + 3 = 19; 19 ist kein Divisor oder 32, daher ist 32 keine Redivosite-Zahl
- N = 260 : 260/2 + 3 = 133, 133/7 + 8 = 27, 27/3 + 4 = 13; 13 ist ein Divisor oder 260, also 260 ist eine Redivosite-Zahl
Deine Aufgabe
- Wenn Sie eine Ganzzahl N angeben, geben Sie einen Wahrheitswert zurück, wenn es sich um eine Redivosite Number handelt, oder einen anderen falschen Wert. (Sie können auch zwei unterschiedliche Werte ausgeben, sofern diese konsistent sind.)
- Die Eingabe ist garantiert größer als 6 .
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
code-golf
decision-problem
integer
division
Arnauld
quelle
quelle
a(n)
direkt rechnen können oder weil Sie einen Term aus vorherigen berechnen können). Danke, Arnauld, dass du die Herausforderung geändert hast. :)Antworten:
Haskell,
918583807574 BytesProbieren Sie es online!
Edit: -2 Bytes dank @BMO, -3 Bytes dank @ H.PWiz und
-5-6 Bytes dank @ Ørjan Johansenquelle
Schale , 14 Bytes
Probieren Sie es online!
-3 danke an H.PWiz .
quelle
Ω
Γ
...Γ
eine Liste gegeben [a, b, c ...] gelten~+→Π
zua
und[b,c...]
.~+→Π
fügta+1
zuproduct[b,c...]
.a
ist der kleinste Teiler,product[b,c...]
istN/d
C (GCC) ,
9489 BytesProbieren Sie es online!
Erläuterung
quelle
Jelly , 14 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 ,
9791 BytesProbieren Sie es online!
Ausgänge über Exit-Code.
Ungolfed:
Probieren Sie es online!
quelle
05AB1E ,
1716 BytesProbieren Sie es online!
Erläuterung
quelle
Pyth , 20 Bytes
Probieren Sie es hier aus!
Wie es funktioniert
Und die ersten 4 Bytes (
<P_Q
) prüfen nur, ob der Eingang nicht prim ist.Mit Hilfe von Emigna konnte ich 3 Bytes einsparen.
quelle
head(P)
anstelle desfiITZ2
Teils verwenden, da der kleinste Teiler, der größer als 1 ist, immer eine Primzahl ist?Python 3 , 149 Bytes
Probieren Sie es online!
Mit einem Sieb Ansatz. Sollte
O(N log log N)
auch bei großen schnell sein ( = zeitliche Komplexität des Siebs des Eratosthenes)N
(speichert aberO(N)
ganze Zahlen im Speicher)Hinweis:
n
nicht übersteigenN
, undN > 7
p
kann inrange(2,N)
dem stattrange(2,N+1)
zum Sieben./
funktioniert nicht,//
muss wegen Listenindex verwendet werden.range
in eine andere Variable hilft leider nicht.Erläuterung:
-~N
==N+1
.s
mitN+1
Nullen initialisiert (Python ist 0-indiziert, also sind die Indizes0..N
)s[n]
wird erwartet, dass0
ifn
eine Primzahl ist, undp
fürp
die minimale Primzahl, dien
if teilt,n
ein Composite.s[0]
unds[1]
Werte sind nicht wichtig.Für jeden
p
in Reichweite[2 .. N-1]
:s[p] < 1
(das heißts[p] == 0
), dannp
ist es eine Primzahl, und für jedeq
ist ein Vielfaches vonp
unds[q] == 0
, zuzuweisens[q] = p
.Die letzten beiden Zeilen sind unkompliziert, mit der Ausnahme, dass
n//s[n]-~s[n]
==(n // s[n]) + s[n] + 1
.Python 3 , 118 Bytes
Probieren Sie es online!
Auf Kosten einer etwas schlechteren Leistung. (Dieser läuft in
O(N log N)
zeitlicher Komplexität, unter der Annahme einer sinnvollen Implementierung von Python-Slices)Das entsprechende vollständige Programm ist 117 Bytes .
quelle
n//s[n]-~s[n]
stattn//s[n]+s[n]+1
149 Bytes verwenden.or p
kann sein|p
or p
führt logisch oder durch, während|p
bitweise oder. Das heißt,a or b
istb if a == 0 else a
.for
, um stattdessen ein anderes Slice zu verwendenfor
. Dasrange
ist umgekehrt, so dass niedrigere Indizes die größeren überschreiben, und wenn2*p
Sie das Slice bei starten , wirds[0]
oder nicht ersetzts[p]
.Haskell , 110 Bytes
Probieren Sie es online!
Nicht sehr glücklich ...
quelle
Oktave , 92 Bytes
Probieren Sie es online!
quelle
APL (Dyalog) , 50 Bytes
Probieren Sie es online!
quelle
Japt,
2524 BytesIch fürchte, ich bin vielleicht in die falsche Richtung gegangen, aber mir ist die Zeit ausgegangen, einen anderen Ansatz zu wählen.
Ausgaben
0
für false oder1
für true.Versuch es
quelle
Perl 5 , 291 + 1 (-a) = 292 Bytes
Darn Perl, weil er keinen nativen Prim Checker hat.
Ungolfed version,
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 64 Byte
Einfache Implementierung durch rekursives Ersetzen von Mustern
(Ersetzen von "\ [Divides]" durch das Symbol "∣" spart 7 Bytes)
Probieren Sie es online!
quelle
Sauber ,
128117114 BytesProbieren Sie es online!
quelle
J , 35 Bytes
Probieren Sie es online!
Der minimale Divisor, der der erste Hauptfaktor ist, wurde aus der @ Dennis's Jelly-Lösung gestohlen (zuvor habe ich verwendet)
<./@q:
) .Es sollte einen besseren Weg geben, um die Iteration durchzuführen, aber ich kann ihn scheinbar nicht finden. Ich habe überlegt, nicht den Primalitätstest (
^:(0&p:)
) zu machen und stattdessen den Negativtest zu verwenden, aber es scheint, als würde das etwas länger dauern, da Sie einen benötigen_2{
einige Änderungen die möglicherweise keine Nettoreduktion ergeben.Ich habe wirklich das Gefühl, dass es einen Weg geben muss, um zu vermeiden, dass Parens auch um die Primalitätsprüfung herum stattfinden.
Erklärung (erweitert)
quelle
APL NARS, 43 Zeichen, 85 Byte
(in der Hoffnung, dass es für alle Zahlen> 6 konvergiert) Test:
Die Idee mit 2 anonymen Funktionen komme ich zu einer anderen Apl-Lösung.
quelle
Pyt , 44 Bytes
Eine Erklärung finden Sie im folgenden Code. Die einzigen Unterschiede sind (1), dass N vor dem Inkrementieren der Schleife dekrementiert wird, und (2) dass NOR anstelle von OR verwendet wird.
Probieren Sie es online!
Ich habe das gemacht, bevor ich die Frage erneut gelesen habe und festgestellt habe, dass es nur ein Richtig / Falsch sein soll.
Pyt, 52 Bytes
Gibt eine unendliche Liste von Redivosite-Zahlen aus.
Erläuterung:
Probieren Sie es online!
quelle