Sei (Eingabe)
Dann sind die Teiler: 1, 2, 3, 6, 7, 14, 21, 42
Quadrieren jedes Divisors: 1, 4, 9, 36, 49, 196, 441, 1764
Summe nehmen (addieren): 2500
Da wir einen Wahrheitswert zurück. Wenn es sich nicht um ein perfektes Quadrat handelt, geben Sie einen falschen Wert zurück.
Beispiele:
42 ---> true
1 ---> true
246 ---> true
10 ---> false
16 ---> false
Dies ist Code-Golf, so dass der kürzeste Code in Bytes für jede Sprache gewinnt
Vielen Dank an @Arnauld für den Hinweis auf die Sequenz: A046655
code-golf
math
number
decision-problem
Beliebiger Benutzer
quelle
quelle
Antworten:
R ,
3937 BytesProbieren Sie es online!
Verwendet den klassischen "Test if perfect square" -Ansatz, bei dem der nichtintegrale Teil der Quadratwurzel
S^.5%%1
und die logische Negation davon herangezogen werden, da Null (perfektes Quadrat) aufTRUE
und Nicht-Null auf abgebildet werdenFALSE
.Vielen Dank an Robert S , der ein paar Bytes gespart hat!
quelle
scan()
ein paar Bytes sparen?JavaScript (ES7),
46 4442 Byte1 Byte dank @Hedi gespeichert
Probieren Sie es online!
Kommentiert
quelle
d
indem Sie vonn
nach gehen ,0
anstatt dies2
zun
mögen:n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1)
05AB1E , 5 Bytes
Probieren Sie es online!
Wie?
quelle
Shakespeare Programming Language ,
434428415 BytesProbieren Sie es online!
-13 Bytes dank Jo King!
Ausgänge
1
für wahres Ergebnis, Ausgänge0
für falsches Ergebnis.quelle
Python 2 , 55 Bytes
Probieren Sie es online!
quelle
Neim , 5 Bytes
Erläuterung:
Probieren Sie es online!
quelle
C (gcc) ,
67,63,60,59 Bytes-1 Bytes dank @JonathanFrech
Probieren Sie es online!
quelle
++i<=n
seini++<n
?Brachylog ,
128 Bytes-4 Bytes dank Fatelize, weil ich nicht realisiert habe, dass Brachylog eine Faktorfunktion hat
Erläuterung
Probieren Sie es online!
quelle
f^₂ᵐ
ist 4 Bytes kürzer alsḋ{⊇×^₂}ᵘ
MathGolf ,
54 BytesProbieren Sie es online!
Erläuterung
Sehr ähnlich zu anderen Antworten, im Vergleich zu 05AB1E erhalte ich ein Byte für meinen Operator "is perfect square".
quelle
MATL , 9 Bytes
Probieren Sie es online!
So einfach wie es nur geht
quelle
PowerShell ,
6856 BytesProbieren Sie es online!
Scheint lange ...-12 Bytes dank mazzy
Macht genau das, was es verspricht. Nimmt den Bereich von
1
bis zur Eingabe$n
und multipliziert das Quadrat$_*$_
mal, ob es sich um einen Divisor handelt oder nicht!($n%$_)
. Dies macht Divisoren gleich einer Zahl ungleich Null und Nicht-Divisoren gleich Null. Die Summe nehmen wir dann mit unserem Akku$a
. Als nächstes wiederholen wir die Schleife von1
oben nach unten$a
und ziehen die Zahlen heraus, zu denen|?{...}
sie im Quadrat-eq
passen$a
. Das bleibt in der Pipeline und die Ausgabe ist implizit.Gibt eine positive Ganzzahl für die Wahrheit und nichts für die Falschheit aus.
quelle
$args[0]
kürzer ist :)1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}
$n
in der Schleife brauchst!($n%$_)
. Aber Ihr Umschreiben der Summe sparte 12 Bytes, also danke!$args[0]
Japt ,
1197 Bytes-2 Bytes von @ Giuseppe und weitere -2 von @ Shaggy
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 18 Byte
Probieren Sie es online!
Anonymes Lambda. Gibt 1 für wahr und 0 für falsch zurück (Testfälle in TIO sind prettified).
Grüße an @ H.PWiz für 4 Bytes!
Wie:
quelle
not
anstatt0=
ein Byte zu speichern?not
Operator (~
) von APL , wenn er monadisch verwendet wird, nur mit Booleschen Werten (entweder 0 oder 1). Da eine beliebige Zahl Modulo 1 niemals gleich 1 ist, würde ich, wenn ich sie~
anstelle von verwende0=
, einedomain error
beliebige Zahl erhalten, die kein perfektes Quadrat ist, da Dezimalwerte außerhalb des~
Bereichs liegen. Außerdem kann ich das nicht einfach weglassen0=
, da der Wahrheitswert von APL 1 und nicht 0 ist und es keine konsistente Ausgabe für falsche Werte gibt.K (oK) ,
262522 BytesLösung:
Probieren Sie es online!
Erläuterung:
Anmerkungen:
quelle
Pari / GP , 23 Bytes
Probieren Sie es online!
quelle
Matlab,
3937 BytesLeider funktioniert es nicht auf Octave (auf tio), also kein tio Link.
Hinweis Wie @LuisMendo angibt,
divisors()
gehört zu Symbolic Toolbox.quelle
divisors
es zur Symbolic Toolbox gehört. Das solltest du im Titel angeben. Sie können auch~···
anstelle von···==0
sum(...)^.5
anstelle vonsqrt(sum(...))
Haskell ,
786453 Bytes-14 Bytes dank Ørjan Johansen . -11 bytes dank ovs .
Probieren Sie es online!
Hey, es ist schon eine Weile her, dass ich ... irgendeinen Code geschrieben habe , so dass mein Haskell und Golfen ein bisschen verrostet sein könnten. Ich habe die lästigen numerischen Typen von Haskell vergessen. : P
quelle
Pyt , 7 Bytes
Probieren Sie es online!
Erläuterung
Probieren Sie es online!
Erläuterung
Probieren Sie es online!
Erläuterung
quelle
Schale , 6 Bytes
Probieren Sie es online!
Erläuterung
quelle
Gelee , 6 Bytes
Probieren Sie es online! Oder sehen Sie die Testsuite an .
Wie?
quelle
Proton , 41 Bytes
Probieren Sie es online!
Ähnliches Vorgehen bei der Python-Antwort.
quelle
Mathematica, 32 Bytes
Funktion pur. Nimmt eine Zahl als Eingabe und gibt sie zurück
True
oderFalse
als Ausgabe. Nicht ganz sicher, ob es eine kürzere Methode zur Überprüfung perfekter Quadrate gibt.quelle
Oktave / MATLAB, 43 Bytes
Probieren Sie es online!
quelle
Rot , 67 Bytes
Probieren Sie es online!
quelle
Scala ,
6867 BytesProbieren Sie es online!
quelle
Perl 6 , 34 Bytes
-1 byte dank nwellnhof
Probieren Sie es online!
quelle
**.5
ist ein Byte kürzer als.sqrt
.F #, 111 Bytes
Probieren Sie es online!
So
d
erhält man die Teiler für alle Zahlen zwischen 1 undn
einschließlich. In der Hauptfunktionu
weist die erste Zeile die Summe aller quadrierten Teiler zum
. Die zweite Zeile enthält die Divisoren fürm
und bestimmt, ob eines der Quadrate gleich istm
.quelle
Perl 5, 47 Bytes
Gibt 1 für wahr und nichts für falsch zurück.
Erläuterung:
quelle
Groovy , 47 Bytes
Ein Lambda, das ein numerisches Argument akzeptiert.
Erläuterung
(1..n)
Erstellt ein Array mit den Werten 1 bis nn%i
falsch ist (als 0 falsy ist) , wenni
dividierenn
ohne Restn%i ? 0 : i*i
ist die Summe des Quadrats des Wertes,i
wenn ern
ohne Rest dividiert , ansonsten ist sie 0sum{ i-> n%i ? 0 : i*i }
summiert das vorherige Ergebnis über allei
im Array.s%Math.sqrt(s)
falsch ist (als 0 falsy ist) , wenn der von sqrts
dividierens
ohne Rest!(s%Math.sqrt(s))
ergibt sich aus dem Lambda (return
implizit in der letzten Anweisung),!false
wenn sich das Quadrat ohne Rests
teilts
Probieren Sie es online!
quelle
Java 8,
75-70Bytes-5 Bytes dank @ archangel.mjj .
Probieren Sie es online aus.
Erläuterung:
quelle
n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}