Problem 4 - Project Euler
総当たりしたときのスピードが段違い。
R
## 総当たり 17秒程度 reverse <- function(n){ sum(rev(floor(n/(10^(0:floor(log(n,10)))))%%10)*10^(0:floor(log(n,10)))) } pal.chk <- function(x){ x == reverse(x) } max.pal <- function(){ ans <- 0 for(i in 998:100){ for(j in 999:i){ if(pal.chk(i*j) && ans < i*j){ ans <- i*j break } } } return(ans) } ## 解答pdf参考 30ms程度 reverse2 <- function(n){ reversed = 0 while(n > 0){ reversed = 10*reversed + n%%10 n = floor(n/10) } return(reversed) } pal.chk2 <- function(n){ n==reverse2(n) } lp.chk <- function(){ largestPalindrome = 0 a = 999 while(a >= 100){ if((a %% 11)==0){ b = 999; db = 1; }else{ b = 990; db = 11; } while(b >= a){ if((a*b) <= largestPalindrome) break() if(pal.chk2(a*b)) largestPalindrome = a*b b = b-db } a = a-1 } return(largestPalindrome) }