Definições:
- Um triângulo é considerado um triângulo retângulo se um dos ângulos internos for exatamente 90 graus.
- Um número é considerado racional se puder ser representado por uma razão de números inteiros, ou seja
p/q
, onde ambosp
eq
são números inteiros. - Um número
n
é um número congruente se existir um triângulo retângulo de área emn
que todos os três lados sejam racionais. - Este é o OEIS A003273 .
Desafio
Este é um desafio para o problema da decisão . Dado um número de entrada x
, produza um valor distinto e consistente se x
for um número congruente e um valor distinto e consistente separado se x
não for um número congruente. Os valores de saída não precisam necessariamente ser verdade / falsey no seu idioma.
Regra Especial
Para os propósitos deste desafio, você pode assumir que as conjecturas de Birch e Swinnerton-Dyer são verdadeiras. Como alternativa, se você puder provar a conjectura de Birch e Swinnerton-Dyer, reivindique seu prêmio do Millennium de US $ 1.000.000. ;-)
Exemplos
(Usando True
para números congruentes e False
outros).
5 True
6 True
108 False
Regras e esclarecimentos
- A entrada e a saída podem ser fornecidas por qualquer método conveniente .
- Você pode imprimir o resultado em STDOUT ou retorná-lo como resultado da função. Indique na sua submissão quais valores a saída pode assumir.
- Um programa completo ou uma função são aceitáveis.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
code-golf
decision-problem
number-theory
AdmBorkBork
fonte
fonte
Respostas:
R,
179173142141137135134 bytesUsando os mesmos argumentos baseados no Teorema de Tunnell , retorna a
0
sen
não for congruente e1
não. (Demorei muito tempo para identificar a restrição na condição aplicável apenas a números inteiros livres de quadrado .)Experimente online
Melhorias trazidas por Arnaud e Giuseppe (o código final é principalmente de Guiseppe!), Com -3 graças a Robin
Análise de sintaxe:
com o Teorema de Tunnell afirmando que n é congruente se e somente se o número de soluções inteiras para 2x² + y² + 8z² = n for duas vezes maior que o número de soluções inteiras para 2x² + y² + 32z² = n se n for ímpar e o número de soluções inteiras para 8x² + y² + 16z² = n é o dobro do número de soluções inteiras para 8x² + y² + 64z² = n se n for par.
fonte
@[username]
... Acho que você foi puxado para o código de golfe por Robin Ryder?-n:n
? Não li o teorema de Tunnel, mas parece-me quen:0
funcionaria da mesma forma para -1 byte ... Além disso, dica profissional, se você pressionar o botão "link" na parte superior do TIO, ficará legal formatos para copiar e colar no PPCG :-) EDIT: Entendo, existem alguns casos emn:0
que não funciona.Ferrugem - 282 bytes
Veja também:
corrigido par / ímpar, obrigado @Level River St
fonte
C ++ (gcc) ,
251234 bytesObrigado a @arnauld por apontar um erro de digitação bobo da minha parte.
-17 bytes graças a @ceilingcat.
Experimente online!
Retorna 1 se
n
for congruente, 0 caso contrário.fonte
JavaScript (ES7), 165 bytes
Muito parecido com a resposta de @ NeilA. , Isso é baseado no teorema de Tunnell e, portanto, assume que a conjectura de Birch e Swinnerton-Dyer é verdadeira.
Retorna um valor booleano.
Experimente online!
Quão?
fonte
Ruby , 126 bytes
Experimente online!
encontrou um local para inicializar
t=1
e expandiu a lista de quadrados em um trio, em vez de usarq
para fazer cópias adicionais.Ruby , 129 bytes
Experimente online!
Usa o teorema de Tunnell como as outras respostas. Eu uso uma única equação da seguinte maneira.
Nós verificar os casos
k=8
ek=32
e verificar se há o dobro de soluções parak=8
quek=32
. Isso é feito adicionandok-16
at
cada vez que encontramos uma solução. Isso é +16 no casok=32
ou -8 no casok=8
. No geral, o número é congruente set
for o mesmo que seu valor inicial no final da função.É necessário encontrar todas as soluções para a equação de teste. Vejo muitas respostas testando entre +/-
sqrt n
. Não há problema em testar também fora desses limites se o código for mais curto, mas nenhuma solução será encontrada porque o lado esquerdo da equação excederán
. O que eu perdi no começo é que negativo e positivox,y,z
são considerados separadamente. Assim,-3,0,3
produz três quadrados9,0,9
e todas as soluções devem ser contadas separadamente (0 deve ser contado uma vez e9
deve ser contado duas vezes).Código ungolfed
fonte