Tarea
Dados dos enteros dy n, encuentre el número de formas de expresar ncomo una suma de dcuadrados. Es decir, n == r_1 ^2 + r_2 ^2 + ... + r_d ^2tal que r_mes un entero para todos los enteros 1 ≤ m ≤ d. Tenga en cuenta que intercambiar dos valores diferentes (por ejemplo, r_1y r_2) se considera diferente de la solución original.
Por ejemplo, el número 45 se puede escribir como una suma de 2 cuadrados 8 formas diferentes:
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
Reglas
- Las soluciones integradas están permitidas pero no son competitivas (ejem, Mathematica )
- Las lagunas estándar también están prohibidas.
- Las entradas pueden invertirse.
Ejemplo de E / S
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
Este es el código de golf , por lo que las presentaciones que utilizan la menor cantidad de bytes ganan.
code-golf
number
number-theory
combinatorics
JungHwan Min
fuente
fuente

1, 0caso de prueba, no hay1manera de expresar0como una suma de1cuadrados:0 == 0^2.Respuestas:
Python 3 , 125 bytes
Pruébalo en línea!
Termina el último caso de prueba en 0.078 s. La complejidad ingenua es O ( d n 2 ).
fuente
Mathematica, 8 bytes, no competitiva
fuente
Jalea , 9 bytes
Pruébalo en línea!
Toma
nyden este orden.fuente
MATL , 13 bytes
Las entradas son
n, entoncesd. Algunos de los casos de prueba se quedan sin memoria.Pruébalo en línea!
Explicación
Considere insumos
17,3.fuente
Haskell , 43 bytes
Solo tu recursión básica. Define una función de infijo binario
#. Pruébalo en línea!Explicación
Si
d == 0yn /= 0, estamos en el segundo caso, y la condiciónd>0hace que la lista esté vacía. La suma de la lista vacía es 0, que es la salida correcta en este caso.fuente
Pari / GP , 31 bytes
Pruébalo en línea!
fuente
05AB1E , 10 bytes
Toma los argumentos como n, luego d. Tiene problemas para resolver los casos de prueba más grandes.
Pruébalo en línea!
Explicación
fuente
Jalea , 23 bytes
Pruébalo en línea!
Puerto de mi solución Python . Termina el último caso de prueba en 2.977 s.
fuente
Mathematica, 38 bytes
Pura función de tomar las entradas en el orden
n,d.Range[-#,#]^2da el conjunto de todos los cuadrados posiblemente relevantes, con cuadrados positivos listados dos veces para hacer el conteo correcto;Tuples[...,#2]produce lasdtuplas de tales cuadrados;Tr/@suma cadadtupla; yCount[...,#]cuenta cuántos de los resultados son igualesn.Los primeros casos de prueba terminan rápidamente, pero calculo que esto tomaría aproximadamente medio año para ejecutarse en el caso de prueba
1000,4. ReemplazarRange[-#,#]por el (más largo pero) más sensibleRange[-Floor@Sqrt@#,Floor@Sqrt@#]acelera ese cálculo a unos 13 segundos.fuente
Mathematica,
5351 bytesfuente
Pitón 2, 138
Solución muy ineficiente con mi querido eval. Por qué no?
Pruébalo en línea
Genera y evalúa código como este:
Entonces, para algunos d grandes , durará mucho y consumirá mucha memoria, teniendo una complejidad de O (n ^ d)
fuente
k , 23 bytes
Pruébalo en línea! Es un simple forzador bruto.
fuente
Pyth - 16 bytes
Intentalo
Es horriblemente ineficiente
fuente