O último teorema de Fermat diz que não há soluções integrais positivas para a equação a^n + b^n = c^n
para nenhuma n>2
. Isso foi comprovado por Andrew Wiles em 1994.
No entanto, existem muitas "quase falhas" que quase satisfazem a equação diofantina, mas a perdem por uma. Precisamente, eles são todos maiores que 1 e são soluções integrais de a^3 + b^3 = c^3 + 1
(a sequência é o valor de cada lado da equação, em ordem crescente).
Sua tarefa é dada n
, para imprimir os primeiros n
valores dessa sequência.
Aqui estão os primeiros valores da sequência:
1729, 1092728, 3375001, 15438250, 121287376, 401947273, 3680797185, 6352182209, 7856862273, 12422690497, 73244501505, 145697644729, 179406144001, 648787169394, 938601300672, 985966166178, 1594232306569, 2898516861513, 9635042700640, 10119744747001, 31599452533376, 49108313528001, 50194406979073, 57507986235800, 58515008947768, 65753372717929, 71395901759126, 107741456072705, 194890060205353, 206173690790977, 251072400480057, 404682117722064, 498168062719418, 586607471154432, 588522607645609, 639746322022297, 729729243027001
Isso é código-golfe , então o código mais curto em bytes vence!
Respostas:
Gelatina , 16 bytes
Solução de força bruta. Experimente online!
fonte
Braquilog , 31 bytes
Experimente online!
Isso não é força bruta completa, pois usa restrições. Isso é um pouco lento no TIO (cerca de 20 segundos para
N = 5
). Demora cerca de 5 segundosN = 5
e 13 segundosN = 6
na minha máquina.Explicação
fonte
Perl, 78 bytes
Abordagem de força bruta. Coutando o shebang como dois, a entrada é retirada de stdin.
Uso da amostra
Experimente online!
fonte
Mathematica, 95 bytes
Função sem nome, usando um único argumento inteiro positivo
#
e retornando uma lista dos#
números inteiros desejados . Espaçado para legibilidade humana:A linha 4 calcula todas as somas possíveis de cubos de números inteiros entre 2 e
b
+1 (com a inicializaçãob=9
na linha 1) na ordem classificada. As linhas 3-5 selecionam dentre essas somas apenas aquelas que também são mais que um cubo perfeito; linha 6 limites que lista para a maioria dos#
valores, que são armazenados ema
. Mas se essa lista tiver de fato menos que#
valores, oWhile
loop nas linhas 1 a 7 é incrementadob
e tenta novamente. Finalmente, a linha 8 é impressaa
uma vez que é do tamanho certo.Santo inferno, esta versão é lenta! Por um byte extra, podemos mudar
b++
na linha 7b*=9
e fazer com que o código seja executado em tempo razoável (de fato, foi assim que eu o testei).fonte
Raquete 166 bytes
Ungolfed:
Teste:
Saída:
fonte
Python 2 ,
10298 bytesExperimente online!
fonte
Pari / GP, 107 bytes
Encontra as 10 primeiras soluções em 10 s.
Objetivo: a ^ 3 + b ^ 3 = c ^ 3 + 1
Obtém o número de soluções necessárias pelo argumento da função n
Aumentos c de 3 e para cada c ^ 3 + 1 pesquisas um e b com 1 <a <b = <c tal que a ^ 3 ^ + b = 3 c ^ 3 + 1 . Se encontrado, diminua o número necessário de mais soulutions n em 1 e repita
Acabamentos, quando o número de soluções necessárias adicionalmente (em n ) for igual a 0
Ligue para obter as dez primeiras soluções:
Código legível (requer chaves à esquerda e à direita como indicadores para notação de bloco da função. Também por conveniência, imprime todas as variáveis de uma solução):
Pari / GP, 93 bytes
(Melhoria de Dennis)
fonte
Python 2,
122119 bytespor que você ainda está votando? Dennis esmagou esta resposta;)
Bem-vindo à solução mais longa para esta pergunta: / Consegui remover um byte inteiro criando condições mais longas e removendo o máximo de indentação possível.
Saída para
n = 5
:fonte
TI-Basic, 90 bytes
Deve haver uma maneira mais curta ...
fonte
MATLAB, 94 bytes
Outra solução de força bruta:
Saída para
n=4
:Suprimir a
c=
parte da tela aumenta o código para 100 bytesfonte
C #,
188174187136 bytesVersão de golfe graças a TheLethalCoder por seu ótimo código de golfe e dicas ( Experimente on-line! ):
Tempo de execução para encontrar os 10 primeiros números: 33,370842 segundos no meu laptop i7 (a versão original abaixo era 9.618127 segundos para a mesma tarefa).
Versão não destruída:
Versão anterior de 187 bytes, incluindo
using System;
Versão anterior de 174 bytes (graças a Peter Taylor):
Versão anterior (original) com 188 bytes de golfe ( Experimente online! ):
Tempo de execução para encontrar os 10 primeiros números: 9,618127 segundos no meu laptop i7.
Esta é minha primeira tentativa na codificação C # ... Um pouco detalhada em comparação com outros idiomas ...
fonte
for
loop. 2.int.Parse
é menor do queConvert.ToInt32
. 3.long
é mais curtodouble
e mais preciso para esta tarefa. 4.t
é desnecessário: você pode fazer a contagemn
regressiva0
. 5. Tecnicamente, acho que você precisa quebrar dois loops após a impressão, caso haja uma tripla coincidência.static void Main(){for(long a,b,c=3,n=int.Parse(Console.ReadLine());n>0;c++)for(a=2;a<c;a++)for(b=a;b<c;b++)if(a*a*a+b*b*b==c*c*c+1)Console.WriteLine(c*c*(a=c)+n/n--);}
Action
que salvará os bytes usados na assinatura do método, ou seja,()=>{/*code here*/};
using System;
-Linguagem GameMaker, 119 bytes
Por que é
show_message()
tão longo :(x, y, z = 2,3,4 n = entrada () enquanto n: se y 3 + x 3-z3 == 1e x3 + 1; n- = 1 x + = 1 se y
fonte
Axioma, 246 bytes
ungof e resultado
fonte