Para resolver esse problema, observei primeiro que
Onde é o número de divisores (não necessariamente primos) de . Se é o menor número inteiro tal que , então
Agora devemos escolher tal que é mínima. As opções para são triviais - elas são apenas os primos em ordem crescente.
No entanto, meu primeiro pensamento para escolher estava incorreto. Eu pensei que você poderia simplesmente fatorar , classificar os fatores em ordem decrescente e subtrair 1. Na maioria das vezes isso funciona bem, por exemplo, o menor número inteiro com divisores é:
15 = ( 4 + 1 ) ( 2 + 1 ) m = 2 4 3 2 = 144
Mas isso está incorreto para :
16 = ( 1 + 1 ) ( 1 + 1 ) ( 1 + 1 ) ( 1 + 1 ) m = 2 1 3 1 5 1 7 1 = 210
Considerando que a resposta correta é:
m = 2 3 3 1 5 1 = 120
Portanto, é claro que às vezes precisamos mesclar fatores. Nesse caso, porque . Mas não vejo exatamente uma estratégia de fusão limpa e direta. Por exemplo, pode-se pensar que devemos sempre nos unir à potência 2 , mas isso não é verdade:
m = 2 96 3 1 5 1 7 1 11 1 > 2 96 3 3 5 1 7 1
Não consigo pensar imediatamente em um exemplo, mas meu instinto diz que algumas abordagens gananciosas podem falhar se fundirem os poderes errados primeiro.
Existe uma estratégia ótima e simples para mesclar esses poderes para obter a resposta correta?
No entanto, a solução ideal é:
fonte
Respostas:
Aqui está uma solução, com base nos meus comentários acima. Não afirmo que isso seja ideal.
E também temos a recorrência:
Para esse fim, aqui está um código Python, que concorda com todos os números que você forneceu acima. Observe que ele trabalha com os logaritmos para manter os números menores: portanto, o número inteiro real que você procura é
round(2**smallest(n))
.fonte
powerset
for factor_list in powerset(factors)
n
multiplicative_partitions(24)
[4, 3, 2]
[6, 2, 2]
fonte