Houve muitos desafios relacionados à fatoração prime / prime recentemente, então achei que poderia ser interessante seguir o outro caminho.
Dado:
- um número inteiro positivo
n
e - uma lista não vazia de números inteiros positivos
f
escrever um programa completo ou uma função para encontrar o menor inteiro i
tal que i >= n
e i
é um produto de não-negativos, potências inteiras de elementos f
.
Exemplos:
Suponha
n = 11, f = [2, 3, 5]
.Os primeiros produtos são:
1 = 2^0 * 3^0 * 5^0 2 = 2^1 * 3^0 * 5^0 3 = 2^0 * 3^1 * 5^0 5 = 2^0 * 3^0 * 5^1 4 = 2^2 * 3^0 * 5^0 6 = 2^1 * 3^1 * 5^0 10 = 2^1 * 3^0 * 5^1 9 = 2^0 * 3^2 * 5^0 15 = 2^0 * 3^1 * 5^1 25 = 2^0 * 3^0 * 5^2 8 = 2^3 * 3^0 * 5^0 12 = 2^2 * 3^1 * 5^0 => smallest greater than (or equal to) 11, so we output it. 20 = 2^2 * 3^0 * 5^1 18 = 2^1 * 3^2 * 5^0 30 = 2^1 * 3^1 * 5^1 50 = 2^1 * 3^0 * 5^2 27 = 2^0 * 3^3 * 5^0 45 = 2^0 * 3^2 * 5^1 75 = 2^0 * 3^1 * 5^2 125 = 2^0 * 3^0 * 5^3
Suponha
n=14, f=[9, 10, 7]
.Novamente, os primeiros produtos:
1 = 7^0 * 9^0 * 10^0 7 = 7^1 * 9^0 * 10^0 9 = 7^0 * 9^1 * 10^0 10 = 7^0 * 9^0 * 10^1 49 = 7^2 * 9^0 * 10^0 => smallest greater than (or equal to) 14, so we output it. 63 = 7^1 * 9^1 * 10^0 70 = 7^1 * 9^0 * 10^1 81 = 7^0 * 9^2 * 10^0 90 = 7^0 * 9^1 * 10^1 100 = 7^0 * 9^0 * 10^2
Casos de teste:
n, f -> output
10, [2, 3, 5] -> 10
17, [3, 7] -> 21
61, [3,5,2,7] -> 63
23, [2] -> 32
23, [3] -> 27
23, [2, 3] -> 24
31, [3] -> 81
93, [2,2,3] -> 96
91, [2,4,6] -> 96
1, [2,3,5,7,11,13,17,19] -> 1
151, [20,9,11] -> 180
11616, [23,32] -> 12167
11616, [23,32,2,3] -> 11664 = 2^4 * 3^6
5050, [3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210] -> 5103 = 3^6 * 7
12532159, [57, 34, 12, 21] -> 14183424 = 12^5 * 57
Regras
- Você pode assumir que
f
conterá pelo menos um elemento e que todos os elementos def
serão maiores que 1. - Opcionalmente, você pode assumir que
f
está classificado em ordem decrescente / crescente, se desejar (mas especifique). - Opcionalmente, você pode obter o número de elementos,
f
se desejar. - A saída como uma sequência é permitida.
- Isso é código-golfe , então a resposta mais curta em bytes em cada idioma vence!
- As regras de E / S padrão se aplicam e as brechas padrão são proibidas.
- As explicações são incentivadas.
fonte
∞
salva3
bytes sobre-Log@0 (doesn't work on TIO, but works fine on desktop Mathematica). Also,
Tr [1 ^ {##}] `é um byte menor queLength@{##}
.#2
é ainda mais curto queTr[1^{##}]
. :)Quiet
no seu código principal. Essa resposta gera muitas mensagens erradas. Pelo menos pedir OP se ele está ok com ele∞
problema parece ser um erro. Vou tentar consertar isso.Python 2 ,
918884 bytesExperimente online!
A função
f
verifica recursivamente sen
é um produto da potência dos elementosl
,g
é apenas um invólucro para controlar a iteraçãofonte
Python, 55 bytes
Experimente online!
Copiava descaradamente o script de rodapé de Rod para teste
fonte
Gelatina , 13 bytes
Um link diádico com a lista,
f
à esquerda e o número,n
à direita, que gera um número.Experimente online! Golfily ineficiente - o tempo limite para entradas com mais
n
e / ou mais tempof
.Quão?
Sabemos que os poderes dos fatores individuais (estritamente positivos) nunca precisarão exceder
n-1
... então, vamos apenas inspecionar todas as formas possíveis!
fonte
Retina , 76 bytes
Experimente online! O link exclui os casos de teste mais lentos, mas ainda é um pouco lento, portanto, tente não martelar o servidor de @ Dennis.
fonte
Pitão - 10 bytes
Fica sem memória muito rapidamente.
Experimente online aqui .
Resposta razoável para 16 bytes:
fsm.A}RQ*Md./PTE
fonte
Mathematica, 85 bytes
Entrada
fonte
{d,s}Min@Select[Flatten[1##&@@(s^#)&/@0~Range~9~Tuples~Tr[1^s]],#>=d&]
U+F4A1
, nome longo\[Function]
.0~Range~9
parece muito conservador. Deveg[{2,3,5},1001]
realmente pular1024
e retornar1080
? Esta não é uma entrada particularmente grande.Japonês , 10 bytes
Teste online!
Não funciona no último caso de teste devido a um limite de iteração criado para impedir que o intérprete funcione para sempre (não ajudou muito aqui, pois congelou o navegador por uma hora ...)
Explicação
fonte
Geléia , 9 bytes
O (2tempo de execução e o uso de memória de n • length (f) ) fazem desta uma solução teórica.
Experimente online!
fonte
Haskell , 46 bytes
Esta é uma porta da excelente resposta Python do KSab . Agradeço a Laikoni por sua ajuda na depuração e golfe desta resposta na sala de chat do PPCG Haskell, Of Monads and Men . Sugestões de golfe são bem-vindas! Experimente online!
fonte
Mathematica, 73 bytes
Essencialmente, um exemplo da resposta de Rod em Python . Define dois operadores binários e . retorna if é um produto de elementos de e de outra forma. dá o menor número inteiro . Se alguém puder descobrir uma maneira de eliminar o teste de divisibilidade, eu poderia economizar 10 bytes usando a codificação ISO 8859-1.
±
·
n±f
True
n
f
False
n·f
i
Explicação
fonte
R , 52 bytes
Experimente online!
Já se passaram três semanas, então pensei em finalmente publicar minha própria solução. Esta é uma abordagem de força bruta.
Existe, no entanto, um builtin:
R , 5 bytes
Experimente online!
Dos documentos R:
Alguns testes revelaram um erro na implementação, no entanto, como mostra o link TIO acima.
nextn(91,c(2,6))
deve retornar 96, mas retorna 128. Obviamente, isso só ocorre quandofactors
nem todos são relativamente primos um com o outro. De fato, o código C subjacente revela quenextn
avidamente tenta dividir cada uma delasfactor
até que1
seja alcançado:Isso pode ser resolvido com a entrada em ordem decrescente.
fonte
JavaScript (ES6),
5350 bytesGuardado 3 bytes graças a @DanielIndie
Recebe entrada na sintaxe de currying
(n)(a)
.Casos de teste
Mostrar snippet de código
Quão?
fonte