Problem 87

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]))