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 }