In der Basis 10 enden alle perfekten Quadrate auf 0 , 1 , 4 , 5 , 6 oder 9 .
In Basis 16 enden alle perfekten Quadrate mit 0 , 1 , 4 oder 9 .
Nilknarf beschreibt in dieser Antwort, warum dies so ist und wie dies sehr gut funktioniert , aber ich werde hier auch eine kurze Beschreibung geben:
Beim Quadrieren einer Basis-10-Zahl, N , wird die Einerstelle nicht durch die Zehner- oder Hunderter-Stelle usw. beeinflusst. Nur die Einerstelle in N wirkt sich auf die Einerstelle in N 2 aus . Ein einfacher (aber möglicherweise nicht der erfolgreichste) Weg, alle möglichen letzten Stellen für N 2 zu finden, besteht darin, n 2 mod 10 für alle 0 <= n zu finden < 10 . Jedes Ergebnis ist eine mögliche letzte Ziffer. Für Base-m könnte man n 2 mod m für alle 0 <= n < m finden .
Schreiben Sie ein Programm, das bei Eingabe von N alle möglichen letzten Ziffern für ein perfektes Quadrat in Base-N ausgibt (ohne Duplikate). Sie können davon ausgehen , N größer ist 0 , und das N ist klein genug , dass N 2 nicht Überlauf (Wenn Sie den ganzen Weg bis testen N 2 , gebe ich Ihnen eine endliche Menge Pluspunkte, aber wissen , dass Der Wechselkurs von Brownie-Punkten zu echten Punkten ist unendlich zu eins.
Tests:
Input -> Output
1 -> 0
2 -> 0,1
10 -> 0,1,5,6,4,9
16 -> 0,1,4,9
31 -> 0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28
120 -> 0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105
Das ist Code-Golf , also gelten die Standardregeln!
(Wenn Ihnen dies zu leicht fällt oder Sie eine ausführlichere Frage zum Thema wünschen, sollten Sie sich diese Frage überlegen: Minimale Abdeckung der Basen für die quadratische Prüfung der Rechtwinkligkeit nach Restwerten ).
quelle
Antworten:
Gelee , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
Google Sheets,
525147 Bytes4 Bytes gespart dank Taylor Scott
Sheets fügt am Ende der Formel automatisch 4 schließende Klammern hinzu.
Es gibt die Ergebnisse nicht in aufsteigender Reihenfolge zurück, aber es gibt die richtigen Ergebnisse zurück.
quelle
)
s für -4 Bytes fallen zu lassen05AB1E , 5 Bytes
Probieren Sie es online! oder als Test Suite
quelle
s
arbeitet man hier? Wird die Eingabe wiederholt?s
istpop a,b; push b,a
. Wenn ein Befehl versucht, etwas aus dem Stapel zu entfernen und nichts mehr übrig ist, wird die nächste Eingabe verwendet. Wenn keine Eingabe mehr vorhanden ist, wird die letzte Eingabe verwendet ( hier ein Beispiel ). In diesem Fall hätte ich verwenden können,¹
was den ersten Eingang drückt, abers
besser für die Testsuite funktioniert.Ln¹%ê
ist hier gleichwertig.s
.Swift ,
47 3532 * Bytes* -3 danke an @Alexander.
Möglicherweise das erste Mal in der Geschichte. Schnelle
Verbindungenschlagen Python?Probieren Sie es online!
Erläuterung
(0..<m).map{}
- Durchläuft den Bereich[0...m)
und ordnet die folgenden Ergebnisse zu:$0*$0%m
- Das Quadrat jeder Ganzzahl modulo der Basism
.Set(...)
- Entfernt die Duplikate.m in
- Weist die Basis einer Variablen zum
quelle
C #, 63 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 52 Byte
Testfälle
Code-Snippet anzeigen
Nicht-rekursive Version,
6058 Bytes2 Bytes dank @ThePirateBay gespart
Testfälle
Code-Snippet anzeigen
quelle
m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))
Pyth, 6 Bytes
Probieren Sie es online aus
Wie es funktioniert
quelle
Brachylog ,
109 BytesProbieren Sie es online!
Erläuterung
quelle
{>≜^₂;?%}ᵘ
eine Alternative vorschlagen ... dann wurde mir klar, dass es auch negative Zahlen gibt. > _ <≜
.>
afaik noch negative Zahlen ausmachen würde.Japt ,
76 BytesProbier es aus
Dank Oliver 1 Byte gespart
Erläuterung
Implizite Eingabe einer Ganzzahl
U
.Erstellen Sie ein Array von ganzen Zahlen von
0
bisU-1
einschließlich und übergeben Sie jede durch eine Funktion.Platz.
Modulo
U
.Holen Sie sich alle eindeutigen Elemente im Array und geben Sie das Ergebnis implizit aus.
quelle
Dz%UÃâ
scheint gut zu funktionieren.Python 3 ,
403937 Bytes-1 Byte danke an Herrn Xcoder. -2 Bytes dank Business Cat.
Probieren Sie es online!
quelle
n**2
durchn*n
?range(m)
genugEigentlich 11 Bytes
Probieren Sie es online!
Erläuterung:
quelle
CJam , 12 Bytes
Anonymer Block, der eine Nummer akzeptiert und eine Liste zurückgibt.
Probieren Sie es online!
Erläuterung
quelle
{:X{_*X%}%_&}
für 13 BytesHaskell , 45 Bytes
-4 Bytes von Anders Kaseorg
Probieren Sie es online!
quelle
f m=nub$map((`mod`m).(^2))[0..m]
genauso lang, es sei denn, es gibt eine hinterhältige Syntax, um zusätzliche Klammern loszuwerden.MATL ,
65 Bytes-1 Byte dank @LuisMendo
Probieren Sie es online!
quelle
Oktave , 27 Bytes
Probieren Sie es online!
quelle
Mathematica, 30 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 48 Byte
43 Bytes, wenn die Rückgabe von a
Set
anstelle eines Arrays zulässig ist.quelle
Scala ,
32BytesEinfache Bedienung mit dem Easy Tip von OP.
Probieren Sie es online!
-2 Bytes dank @MrXcoder mit Prioritäten (keine Notwendigkeit für
()
um*
Operation)Fragen Sie sich: Ist es möglich , den Compiler implizit anzuweisen, Dinge wie
(0 to n-1)map(x=>x*x%n)toSet
(ohne dies tun zu müssenimport scala.language.postfixOps
) zu verstehen ?quelle
(0 to n-1).map(x=>x*x%n).toSet
für 30 Bytes. Potenzierung hat höhere Priorität als Modulo.Haskell , 44 Bytes
Probieren Sie es online!
quelle
Netzhaut , 70 Bytes
Probieren Sie es online! Warnung: Langsam für große Eingaben. Etwas schnellere 72-Byte-Version:
Probieren Sie es online!
quelle
Clojure, 40 Bytes
quelle
Perl 6 , 19 Bytes
Probier es aus
Erweitert:
quelle
Pyth , 13 Bytes
Versuchen Sie es online.
Lahmer Erklärungsversuch:
Um die Ausgabe zu sortieren, fügen Sie an einer
S
beliebigen Seite des ein{
Ich denke, es sollte einen kürzeren Weg geben ...
quelle
map
ist dein Freund!Python 2 , 59 Bytes
Probieren Sie es online!
quelle
PowerShell , 35 Byte
Probieren Sie es online!
quelle
R , 28 Bytes
Probieren Sie es online!
quelle
Rubin ,
3130 BytesProbieren Sie es online!
quelle
PHP , 53 Bytes
Gehen Sie mit der Taste von 0 zur Eingangsnummer
n^2 mod base
markieren Sie die verwendeten Nummern Formel. Es geht zu dieser Position in einem Array, überprüft, ob es erhöht wurde, und gibt es aus, wenn dies nicht der Fall ist. Anschließend wird es inkrementiert, damit keine doppelten Werte gedruckt werden.Probieren Sie es online!
quelle
8. ,
138131 BytesCode
Erläuterung
[]
- Ausgabe-Array erstellenswap dup >r
- Eingaben zur späteren Verwendung speichern( 2 ^ r@ n:mod a:push ) 1 rot loop
- Quadratisches Ende berechnenrdrop
- R-Stack reinigen' n:cmp a:sort
- Ausgabearray sortieren' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip
- Entfernen Sie aufeinanderfolgende Duplikate aus dem ArraySED (Stack Effect Diagram) ist:
a -- a
Verwendung und Beispiel
quelle
Perl 5 , 41 + 1 (-n) = 42 Bytes
Probieren Sie es online!
quelle