Herausforderungsbeschreibung
Eine Smith-Zahl ist eine zusammengesetzte Zahl, deren Ziffernsumme gleich der Ziffernsumme ihrer Primfaktoren ist. N
Bestimmen Sie anhand einer Ganzzahl , ob es sich um eine Smith-Zahl handelt oder nicht.
Die ersten paar Smith Zahlen sind 4
, 22
, 27
, 58
, 85
, 94
, 121
, 166
, 202
, 265
, 274
, 319
, 346
, 355
, 378
, 382
, 391
, 438
(Sequenz A006753 in OEIS).
Sample Input / Output
18: False (sum of digits: 1 + 8 = 9; factors: 2, 3, 3; sum of digits of factors: 2 + 3 + 3 = 8)
22: True
13: False (meets the digit requirement, but is prime)
666: True (sum of digits: 6 + 6 + 6 = 18; factors: 2, 3, 3, 37; sum of digits of factors: 2 + 3 + 3 + 3 + 7 = 18)
-265: False (negative numbers can't be composite)
0: False (not composite)
1: False (not composite)
4937775: True
Anmerkungen
- Ihr Code kann eine Funktion (Methode) oder ein voll funktionsfähiges Programm sein.
- Anstelle von Wörtern wie
True
undFalse
können Sie auch alle anderen wahren und falschen Werte verwenden, sofern klar ist, um welche es sich handelt. - Dies ist eine Code-Golf- Herausforderung, also mach deinen Code so kurz wie möglich!
code-golf
math
number-theory
decision-problem
shooqie
quelle
quelle
Antworten:
Jelly ,
1211 BytesGibt 1 für Smith-Zahlen und sonst 0 zurück . Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Hintergrund
Æf
(Primfaktorisierung) undD
(Ganzzahl bis Dezimalzahl) werden so implementiert, dassP
(Produkt ) und (Ganzzahl bis Dezimalzahl)Ḍ
linke Inverse bilden.Für die ganzen Zahlen -4 bis 4 ,
Æf
gibt die folgende.Für die Zahlen -10, -1, -0,5, 0, 0,5, 1, 10 wird
D
Folgendes zurückgegeben.Wie es funktioniert
quelle
Python 2,
122115110106 Bytes4 Bytes gespart dank Dennis
Probieren Sie es auf ideone.com
Erläuterung
Liest eine Nummer auf stdin und gibt aus,
True
ob die Nummer eine Smith-Nummer ist oderFalse
nicht.quelle
print n<m>s==sum(map(int,`m`))
.Brachylog , 19 Bytes
Probieren Sie es online!
Erläuterung
quelle
_
(sogenanntes niedriges Minus ).05AB1E ,
1117 BytesErläuterung
Probieren Sie es online!
quelle
PowerShell v3 +, 183 Byte
Keine eingebaute Hauptprüfung. Kein eingebautes Factoring. Keine eingebaute Ziffernsumme. Alles ist handgemacht. : D
Übernimmt die Eingabe
$n
als Ganzzahl und setzt sie$b
gleich einem leeren Array. Hier$b
ist unsere Sammlung von Primfaktoren.Weiter ist eine
for
Schleife. Wir setzen zuerst$a
gleich unserer Eingangszahl und die Bedingung ist bis$a
ist kleiner als oder gleich 1. Diese Schleife wird unsere Primfaktoren finden.Wir durchlaufen eine Schleife von
2
bis zu$a
und verwendenWhere-Object
(|?{...}
), um Primzahlen zu extrahieren , die auch Faktoren sind!($a%$_)
. Diese werden in einer inneren Schleife zugeführt|%{...}
, die den Faktor in platziert$b
und dividieren$a
(so werden wir schließlich bekommen1
).Jetzt haben wir alle unsere Hauptfaktoren in
$b
. Zeit für die Formulierung unserer Booleschen Ausgabe. Wir müssen sicherstellen , dass$n
ist-notin
$b
, denn wenn es ist , dass Mittel , die eine$n
Primzahl ist, und so ist kein Smith Zahl. Zusätzlich (-and
) müssen wir sicherstellen, dass unsere zwei Sätze von Ziffernsummen gleich sind-eq
. Der resultierende Boolesche Wert verbleibt in der Pipeline und die Ausgabe ist implizit.NB - Erfordert v3 oder neuer für den
-notin
Betreiber.Ich führe immer noch die Eingabe für ausNach mehr als 3 Stunden habe ich einen Stackoverflow-Fehler erhalten. Also gibt es irgendwo eine Obergrenze. Naja.4937775
(dies ist langsam zu berechnen), daher aktualisiere ich diese, sobald dies abgeschlossen ist .Dies funktioniert bei negativen Eingaben (0 oder 1), da die rechte Seite der
-and
einen Fehler ausblendet, während versucht wird, die Ziffernsummen (siehe unten) zu berechnen. Dadurch wird diese Hälfte$false
bei der Auswertung auf " 0" gesetzt. Da STDERR standardmäßig ignoriert wird und weiterhin die richtige Ausgabe angezeigt wird, ist dies in Ordnung.Testfälle
quelle
MATL, 17 Bytes
Ausgänge truthy oder Falsey Arrays , wo ein truthy Ausgang erfordert , dass alle Elemente nicht gleich Null sein.
Probieren Sie es online aus
quelle
Jelly ,
27 2523 Bytes(Weiteres Golfen
wahrscheinlichdefinitiv möglich)Gibt
0
False oder1
True zurückAlle Testfälle bei TryItOnline
Wie?
quelle
Eigentlich 18 Bytes
Leider ist in Actually keine Faktorisierung integriert, die der Multiplizität die Primfaktoren einer Zahl gibt. Ich musste also eine zusammen hacken. Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
Haskell,
120105 Bytesquelle
Oktave,
8078 BytesErläuterung:
Probieren Sie es online aus .
quelle
any(t<0)
für Nicht-Primalität ist sehr klugPyth, 21 Bytes
Ein Programm, das die Eingabe einer Ganzzahl annimmt und
True
oderFalse
nach Bedarf ausgibt.Probieren Sie es online aus
Wie es funktioniert
quelle
Perl 6 ,
928887 BytesEine anonyme Funktion, die einen Bool zurückgibt.
( online ausprobieren )
BEARBEITEN: -1 Byte dank b2gills
quelle
2..i-1
ist besser geschrieben als2..^i
.Java 7,
509506435426419230 BytesIch hätte @BasicallyAlanTuring 's Kommentar anhören sollen .
Na ja ... Einige Programmiersprachen verwenden ein einzelnes Byte für die Primfaktoren oder den Primcheck, aber Java ist sicherlich keine davon.
EDIT: Die Anzahl der Bytes wurde halbiert, da ich etwas Zeit hatte, darüber nachzudenken.
Ungolfed (sort-off ..) & Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
Brachylog (neuer) , 11 Bytes
Probieren Sie es online!
Prädikat ist erfolgreich, wenn die Eingabe eine Smith-Zahl ist, und schlägt fehl, wenn dies nicht der Fall ist.
quelle
Japt ,
1411 Bytes-3 Bytes dank @Shaggy
Probieren Sie es online!
quelle
JavaScript (ES6),
87 8684 BytesProbieren Sie es online!
quelle
Pyke, 16 Bytes
Probieren Sie es hier aus!
quelle
2
Perl 6 , 80 Bytes
Probieren Sie es online!
Anonymer Codeblock, der eine Ganzzahl akzeptiert und einen Booleschen Wert zurückgibt.
quelle
APL (Dyalog Extended) ,
3629 Byte SBCSDiese Antwort ist der
⍭
Monade von Extended zu verdanken, die die Primfaktoren einer Zahl⊤
zurückgibt , und das ist bei der Basisumwandlung besser als in Dyalog Unicode.Edit: -7 Bytes dank dzaima.
Probieren Sie es online!
Erläuterung
quelle
{2>⍵:0⋄(⊃=+/-⊃×2<≢)+⌿10⊤⍵,⍭⍵}
J ,
31-30BytesProbieren Sie es online!
quelle
C (GCC) ,
139136 BytesProbieren Sie es online!
-3 Bytes dank ceilingcat
Erläuterung:
quelle
t-h&&i==_
stattdessen vort-h?i==_:0
Schläger 176 Bytes
Liefert 1 wenn wahr und 0 wenn falsch:
Ausführliche Version:
quelle
Rust - 143 Bytes
geliehene Python-Lösung von @levitatinglion ... zumindest ist dies kürzer als Java ...
degolfed bei play.rust-lang.org
quelle
APL (NARS), 33 Zeichen, 66 Bytes
"π⍵" gibt die Listenfaktoren von ⍵ zurück, vorausgesetzt, die Eingabe ist eine positive ganze Zahl> = 1; Prüfung:
quelle
C (gcc) 177 Bytes
Definiert eine Funktion
Q
, die 0 für Smith-Nummern und ungleich Null für Nicht-Smith-Nummern zurückgibtProbieren Sie es online!
Erläuterung:
quelle
C # (Visual C # Interactive Compiler) , 122 Byte
Probieren Sie es online!
quelle