Tarefa
Dado dois números inteiros d
e n
, encontre o número de maneiras de expressar n
como uma soma dos d
quadrados. Ou seja,, n == r_1 ^2 + r_2 ^2 + ... + r_d ^2
tal que r_m
seja um número inteiro para todos os números inteiros 1 ≤ m ≤ d
. Observe que a troca de dois valores diferentes (por exemplo, r_1
e r_2
) é considerada diferente da solução original.
Por exemplo, o número 45 pode ser escrito como uma soma de 2 quadrados de 8 maneiras 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
Regras
- Soluções integradas são permitidas, mas não concorrentes (ahem, Mathematica )
- As brechas padrão também são proibidas.
- As entradas podem ser revertidas.
Exemplo 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
Isso é código-golfe , então envios usando o menor número de bytes ganham!
code-golf
number
number-theory
combinatorics
JungHwan Min
fonte
fonte
1, 0
caso de teste, não há1
maneira de expressar0
como uma soma de1
quadrado:0 == 0^2
.Respostas:
Python 3 , 125 bytes
Experimente online!
Finaliza o último caso de teste em 0,078 s. Complexidade ingênua é O ( d n 2 ).
fonte
Mathematica, 8 bytes, não concorrente
fonte
Geléia , 9 bytes
Experimente online!
Toma
n
ed
nesta ordem.fonte
MATL , 13 bytes
Entradas são
n
, entãod
. Alguns dos casos de teste ficam sem memória.Experimente online!
Explicação
Considere entradas
17
,3
.fonte
Haskell , 43 bytes
Apenas sua recursão básica. Define uma função de infixo binário
#
. Experimente online!Explicação
Se
d == 0
en /= 0
, estamos no segundo caso, e a condiçãod>0
faz com que a lista fique vazia. A soma da lista vazia é 0, que é a saída correta neste caso.fonte
Pari / GP , 31 bytes
Experimente online!
fonte
05AB1E , 10 bytes
Aceita os argumentos como n, depois d. Tem problemas para resolver os casos de teste maiores.
Experimente online!
Explicação
fonte
Gelatina , 23 bytes
Experimente online!
Porta da minha solução Python . Finaliza o último caso de teste em 2.977 s.
fonte
Mathematica, 38 bytes
Pura função de tomar as entradas na ordem
n
,d
.Range[-#,#]^2
fornece o conjunto de todos os quadrados possivelmente relevantes, com quadrados positivos listados duas vezes para corrigir a contagem;Tuples[...,#2]
produz osd
pares de tais quadrados;Tr/@
soma cadad
-tuplo; eCount[...,#]
conta quantos resultados são iguaisn
.Os primeiros casos de teste terminam rapidamente, mas estimo que isso levaria cerca de meio ano para ser executado no caso de teste
1000,4
. A substituiçãoRange[-#,#]
pelo (mais longo, mas) mais sensívelRange[-Floor@Sqrt@#,Floor@Sqrt@#]
acelera esse cálculo para cerca de 13 segundos.fonte
Mathematica,
5351 bytesfonte
Python 2, 138
Solução muito ineficiente com a minha amada avaliação. Por que não?
Experimente online
Ele gerou e avalia código como este:
Portanto, para alguns grandes d, ele será executado por muito tempo e consumirá muita memória, tendo complexidade de O (n ^ d)
fonte
k , 23 bytes
Experimente online! É um simples forçador bruto.
fonte
Pitão - 16 bytes
Tente
É terrivelmente ineficiente
fonte