Problem 14 on the Project Euler site asks us to find the longest chain under 1 million created using the Collatz mapping. This is fairly straightforward, although performance again is not great:
## Problem 14
# Collatz conjecture
problem14 <- function(N) {
maxChain <- 0
chains <- rep(0,N)
x <- 1
for (i in 1:N) {
n <- i
chain <- 0
while(n > 1) {
n <- ifelse(n %% 2 == 0, n/2, 3*n+1)
chain <- chain + 1
if (n < N && chains[n] > 0) {
chain <- chain + chains[n]
break
}
}
chains[i] <- chain
if (chain > maxChain) {
maxChain <- chain
x <- i
}
}
x
}