2015-05-27

Project Euler - Problema 5 en R

Title Continuamos con los problemas planteados en Project Euler.

Problema - Smallest multiple

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

2520 es el número más pequeño que puede ser dividido por cada uno de los números del 1 al 10 sin ningún resto.
¿Cuál es el número positivo más pequeño que es divisible por todos los números del 1 al 20?

Solución

require(numbers)
mLCM(1:20)
[1] 232792560

Notas

Usamos la función mLCM para calcular el mínimo común múltiplo de los números del 1 al 20.

Otra alternativa manual sería calcular los factores primos de cada uno de los números. Después inspeccionamos visualmente los factores comunes de todos ellos.

x <- matrix(1:20)
apply(x, 1, primeFactors)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 2 2

[[5]]
[1] 5

[[6]]
[1] 2 3

[[7]]
[1] 7

[[8]]
[1] 2 2 2

[[9]]
[1] 3 3

[[10]]
[1] 2 5

[[11]]
[1] 11

[[12]]
[1] 2 2 3

[[13]]
[1] 13

[[14]]
[1] 2 7

[[15]]
[1] 3 5

[[16]]
[1] 2 2 2 2

[[17]]
[1] 17

[[18]]
[1] 2 3 3

[[19]]
[1] 19

[[20]]
[1] 2 2 5
Los factores serían: (2^4)*(3^2)*5*7*11*13*17*19 = 232792560

Para calcular los factores primos únicos

unique(unlist(apply(x, 1, primeFactors)))
[1]  1  2  3  5  7 11 13 17 19

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos