Fatorar qualquer número com Javascript: a maneira funcional
Fundo
Quando eu estava no ensino fundamental, depois de aprender aritmética básica, fomos levados a uma aula de fatoração, uma técnica para encontrar elementos de multiplicação que podem formar o número-alvo. O que fizemos então foi testar cada número do menor ao maior para ver se cada um deles era um elemento da multiplicação do número alvo, ou seja, quando dividido por ele dava um número inteiro. Por exemplo, ao procurar todos os números de fator de 62, tentamos 2 (inteiro), 5 (decimal), 7 (decimal) e assim por diante. Até encontrarmos os únicos fatores possíveis para o número 62 são 1, 2, 31 e 62. E se deixarmos esse trabalho tedioso para o computador produzir os resultados?
Método
Antes de ensinar ao computador o que fazer, devemos primeiro descrever o processo manual pelo qual passamos para produzir essa resposta. É assim que eu entendo:
- Crie uma série de números de 1 a N (alvo)
- Para cada um desses números (i), verifique se (N/i) o resultado é um número inteiro ou não
- Se o resultado for um número inteiro, coloque (i) na lista de números de fator para o (N) valor alvo
Resultado
Cada programador pode usar um processo diferente para traduzir um algoritmo, embora sejam baseados exatamente no mesmo algoritmo. Nesse caso, optei por seguir o paradigma funcional e gerei um código como o seguinte:
factorize = num =>
[...Array(num).keys()]
.map(i => i + 1)
.reduce((acc, inc) =>
num % inc === 0 ?
[...acc, inc] : acc
, [])
factorize(62) // get [1, 2, 31, 62]
factorize(123456) // get 28 different numbers
Você pode testá-lo dando à factorizefunção qualquer número com quaisquer dígitos e produzirá os resultados esperados. Mas não espere que seu computador não congele quando receber grandes números de 9 dígitos ou mais.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)