Problema
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
Cada nuevo término en la sucesión de Fibonacci se genera mediante la adición de los dos términos anteriores. Al comenzar con 1 y 2 , los primeros 10 términos serán:1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , ...
De los términos de la sucesión de Fibonacci cuyos valores no superan los cuatro millones, hallar la suma de aquellos que son pares.
Solución
Creando nuestra función
fib <- function(n) {
a = 0
b = 1
for (i in 1:n) {
tmp = b
b = a
a = a + tmp
}
return(a)
}
x <- sapply(1:33, fib)
sum(x[x%%2 == 0])
Utilizamos el paquete numbers
require(numbers) # función Fibonacci
x <- fibonacci(33, TRUE) # Secuencia de números Fibonacci. Ver notas.
even <- x%%2 == 0 # Par o impar
df <- data.frame(x, even)
sum(df[even == TRUE, ]$x)
# Con la función subset
sum(subset(df, even == TRUE)$x)
# Empleando el paquete dplyr
require(dplyr)
filter(df, even == TRUE) %>% summarise(sum(x))
[1] 4613732
Notas
Creamos la secuencia de números Fibonacci de 34 hacia abajo pues fibonacci(34) es el primero en exceder los 4 millones: 5702887. Por tanto, no sería necesaria la condición < 4000000, pero la dejamos como referencias por si hubiéramos partido de un número Fibonacci mayor.
fibonacci(33)
[1] 3524578
fibonacci(34)
[1] 5702887
Referencias
No hay comentarios:
Publicar un comentario