Aufgabe
Wenn zwei ganze Zahlen d
und gegeben sind n
, finden Sie die Anzahl der Ausdrücke n
als Summe der d
Quadrate. Das heißt, n == r_1 ^2 + r_2 ^2 + ... + r_d ^2
dass dies r_m
eine ganze Zahl für alle ganzen Zahlen ist 1 ≤ m ≤ d
. Beachten Sie, dass das Vertauschen von zwei verschiedenen Werten (z. B. r_1
und r_2
) als von der ursprünglichen Lösung abweichend angesehen wird.
Zum Beispiel kann die Zahl 45 als Summe von 2 Quadraten auf 8 verschiedene Arten geschrieben werden:
45
== (-6)^2 + (-3)^2
== (-6)^2 + 3^2
== (-3)^2 + (-6)^2
== (-3)^2 + 6^2
== 3^2 + (-6)^2
== 3^2 + 6^2
== 6^2 + (-3)^2
== 6^2 + 3^2
Regeln
- Eingebaute Lösungen sind erlaubt, aber nicht konkurrierend (ahem, Mathematica )
- Standardlücken sind ebenfalls verboten.
- Die Eingaben können vertauscht werden.
Beispiel I / O
In: d, n
In: 1, 0
Out: 1
In: 1, 2
Out: 0
In: 2, 2
Out: 4
In: 2, 45
Out: 8
In: 3, 17
Out: 48
In: 4, 1000
Out: 3744
In: 5, 404
Out: 71440
In: 11, 20
Out: 7217144
In: 22, 333
Out: 1357996551483704981475000
Das ist Code-Golf , also gewinnen Einsendungen mit den wenigsten Bytes!
code-golf
number
number-theory
combinatorics
JungHwan min
quelle
quelle
1, 0
Testfall ist es1
so auszudrücken ,0
als eine Summe von1
Quadrat:0 == 0^2
.Antworten:
Python 3 , 125 Bytes
Probieren Sie es online!
Beendet den letzten Testfall in 0.078 s. Naive Komplexität ist O ( d n 2 ).
quelle
Mathematica, 8 Bytes, nicht konkurrierend
quelle
Gelee , 9 Bytes
Probieren Sie es online!
Nimmt
n
undd
in dieser Reihenfolge.quelle
MATL , 13 Bytes
Eingänge sind
n
dannd
. Einige der Testfälle haben nicht genügend Arbeitsspeicher.Probieren Sie es online!
Erläuterung
Betrachten Sie Eingänge
17
,3
.quelle
Haskell , 43 Bytes
Nur Ihre Grundrekursion. Definiert eine binäre Infixfunktion
#
.Probieren Sie es online!Erläuterung
Wenn
d == 0
undn /= 0
, sind wir im zweiten Fall und die Bedingungd>0
bewirkt , dass die Liste leer ist. Die Summe der leeren Liste ist 0, was in diesem Fall die richtige Ausgabe ist.quelle
Pari / GP , 31 Bytes
Probieren Sie es online!
quelle
05AB1E , 10 Bytes
Nimmt die Argumente als n, dann d. Hat Probleme die größeren Testfälle zu lösen.
Probieren Sie es online!
Erläuterung
quelle
Jelly , 23 Bytes
Probieren Sie es online!
Port meiner Python-Lösung . Beendet den letzten Testfall in 2.977 s.
quelle
Mathematica, 38 Bytes
Reine Funktion der Eingänge in der Reihenfolge nehmen
n
,d
.Range[-#,#]^2
gibt die Menge aller möglicherweise relevanten Quadrate an, wobei positive Quadrate zweimal aufgeführt sind, um die Zählung korrekt zu machen;Tuples[...,#2]
erzeugt died
Tupel solcher Quadrate;Tr/@
summiert jedesd
Tupel; undCount[...,#]
zählt, wie viele der Ergebnisse gleich sindn
.Die ersten paar Testfälle enden schnell, aber ich schätze, es würde ungefähr ein halbes Jahr dauern, bis der Testfall ausgeführt wird
1000,4
. Das ErsetzenRange[-#,#]
durch das (längere, aber) VernünftigereRange[-Floor@Sqrt@#,Floor@Sqrt@#]
beschleunigt diese Berechnung auf ungefähr 13 Sekunden.quelle
Mathematica,
5351 Bytesquelle
Python 2, 138
Sehr ineffiziente Lösung mit meinem geliebten eval. Warum nicht?
Probieren Sie es online aus
Es generiert und wertet Code wie folgt aus:
Also für einige große d wird es sehr lange dauern und verbrauchen viel Speicher, mit der Komplexität von O (n ^ d)
quelle
k , 23 Bytes
Probieren Sie es online! Es ist ein einfacher Brute Forcer.
quelle
Pyth - 16 Bytes
Versuch es
Es ist schrecklich ineffizient
quelle