Um par divertido de equivalências é 1 + 5 = 2 · 3 e 1 · 5 = 2 + 3 . Existem muitos como estes, outro é 1 + 1 + 8 = 1 · 2 · 5 e 1 · 1 · 8 = 1 + 2 + 5 . Em geral, um produto de n números inteiros positivos é igual a uma soma de n números inteiros positivos e vice-versa.
Neste desafio, você deve gerar todas essas combinações de números inteiros positivos para uma entrada n> 1 , excluindo permutações. Você pode produzi-los em qualquer formato razoável. Por exemplo, todas as soluções possíveis para n = 3 são:
(2, 2, 2) (1, 1, 6)
(1, 2, 3) (1, 2, 3)
(1, 3, 3) (1, 1, 7)
(1, 2, 5) (1, 1, 8)
O programa que pode gerar o maior número de combinações para o n mais alto em um minuto no meu laptop Intel Ubuntu de 64 GB de 2 GB vence. Se sua resposta usa mais de 2 GB de RAM ou está escrita em um idioma que não consigo testar com software disponível gratuitamente, não pontuarei sua resposta. Vou testar as respostas daqui a duas semanas e escolher o vencedor. Respostas não concorrentes posteriores ainda podem ser postadas, é claro.
Como não se sabe quais são os conjuntos completos de soluções para todos os n , você pode postar respostas que geram soluções incompletas. No entanto, se outra resposta gerar uma solução (mais) completa, mesmo que seu n máximo seja menor , essa resposta vence.
Para esclarecer, aqui está o processo de pontuação para decidir o vencedor:
Testarei seu programa com n = 2, n = 3, etc ... Armazeno todas as suas saídas e paro quando seu programa leva mais de um minuto ou mais de 2 GB de RAM. Cada vez que o programa é executado para uma determinada entrada n, ele será encerrado se demorar mais de 1 minuto.
Examino todos os resultados de todos os programas para n = 2. Se um programa produziu soluções menos válidas que outro, esse programa é eliminado.
Repita a etapa 2 para n = 3, n = 4, etc ... O último programa em pé vence.
fonte
Respostas:
C (gcc) , n = 50000000 com 6499 resultados em 59 s
Para evitar produzir mais de um terabyte de saída consistindo quase inteiramente de 1s, uma sequência de (digamos) 49999995 1s é abreviada como
1x49999995
.Experimente online!
fonte
Mathematica, n = 293 com 12 soluções
O OP mudou o desafio e pede entrada.
Aqui está o novo código que aceita qualquer n como entrada.
Para n = 293, você obtém as 12 soluções
entrada
Você pode testar esse algoritmo no Wolfram Sandbox, um software on-line disponível gratuitamente.
Basta seguir o link, colar o código (ctrl + v), colar a entrada no final do código e pressionar Shift + Enter para executar.
Você receberá todas as minhas soluções em segundos
Aqui também é Experimente online!em C ++ (gcc)
(Muito obrigado a @ThePirateBay por apoiar e traduzir meu código para um idioma gratuito)
este programa gera apenas soluções da forma {a, b, c} {a, b, c}
que significa a + b + c = a * b * c
Demora 1 segundo para calcular
as doze soluções são:
fonte
Python 2 , n = 175, 28 resulta em 59s
Tornou um pouco mais lento usando um fator de redução 2, mas obtém mais soluções começando com n = 83
Eu obtenho resultados para n até 92 no TIO em uma única execução.
Experimente online!
fonte
Rubi , n = 12 obtém 6 soluções
Pelo menos no TIO, resultados usuais para 1 a 11
Experimente online!
Obtém 10 resultados em menos de um minuto para n = 13 no meu laptop.
fonte
Mathematica, n = 19 com 11 soluções
esta é minha nova resposta de acordo com os novos critérios do OP
se você digitar [n] no final, o programa exibirá as soluções
Aqui estão meus resultados (no meu laptop antigo de 64 bits a 2,4 GHz)
fonte
Haskell, muitas soluções rapidamente
f
calcula as soluções, amain
função adiciona a obtenção da entrada da linha de comando e alguma formatação e contagem.fonte
ghc -O3 -o prodsum prodsum.hs
e execute com o argumento de linha de comando:./prodsum 6
Haskell , n = 10 com 2 soluções
Isso funciona como uma porcaria, mas pelo menos eu o consertei, então estou realmente enfrentando o desafio agora!
Experimente online!
fonte
Axioma, n = 83 em 59 segundos aqui
resultados:
O caminho para executar acima do texto no Axiom seria copiar todo esse texto em um arquivo, salvar o arquivo com o nome: Name.input, em uma janela do Axiom, use ") read absolutepath / Name".
resultados: (# f (i) encontra o comprimento da matriz f (i), que é o número de soluções)
fonte