Problem 87 - Project Euler
素数の2乗+3乗+4乗で表わされる整数のうち5千万より小さい値の個数.
400ms.こういうのはRでも早い.
limit <- 5e7 limit.p <- sqrt(limit) sieve <- logical(limit.p) sieve[1:2] <- c(TRUE,FALSE) for(i in 2:sqrt(limit.p)){ if(!sieve[i]){ for(j in seq(2*i,limit.p,i)){ sieve[j] <- TRUE } } } pr.lis <- (1:limit.p)[!sieve] a <- (pr.lis^4)[pr.lis^4 < limit] b <- (pr.lis^3)[pr.lis^3 < limit] len <- length(pr.lis) x <- rep(b, rep(len,length(b))) + pr.lis^2 y <- rep(a, rep(length(x), length(a))) + x length(unique(y[y<5e7]))