Problem 49

Problem 49 - Project Euler
うむむ1分ギリギリかかる…
もうチョット考えるべきか.

is.prime <- function(n){
  if(n == 1) return(FALSE)
  if(n < 4) return(TRUE)
  if(n%%2==0) return(FALSE)
  if(n < 9) return(TRUE)
  if(n%%3==0) return(FALSE)
  r <- floor(sqrt(n))
  f <- 5
  while(f <= r){
    if(n%%f == 0) return(FALSE)
    if(n%%(f+2) == 0) return(FALSE)
    f <- f + 6
  }
  return(TRUE)
}

limit <- 10^4
sievebound <- (limit-1)/2
sieve <- logical(sievebound)
crosslimit <- (floor(sqrt(limit))-1)/2
for(i in 1:crosslimit){
  if(!sieve[i]){
    for(j in seq(2*i*(i+1), sievebound, 2*i+1)){
      sieve[j] <- TRUE
    }
  }
}
prime.list <- c(2, 2*(1:sievebound)[!sieve]+1)

toDig <- function(n){
  floor(n/(10^(0:floor(log(n, 10)))))%%10
}

count <- 0
for(i in prime.list[1000 < prime.list]){
  for(j in seq(100, (10000-i)/2, 2)){
    if(is.prime(i+j)&& is.prime(i+j+j)){
      x <- toDig(i)
      y <- toDig(i+j)
      z <- toDig(i+j+j)
      if(setequal(x,y)&&setequal(y,z)){
        count <- count+1
        ans <- c(rev(x), rev(y), rev(z))
      }
    }
  }
  if(count == 2) break
}