回文数 595 は連続する平方数の和で表すことができるという面白い性質を持つ: 6^2+7^2+8^2+9^2+10^2+11^2+12^2
1000 未満で連続する平方数の和で表せる回文数はちょうど 11 あり、その合計は 4164 である。正の整数の平方のみをこの問題では扱うため、1=0^2+1^2 は含めないことに注意せよ。
回文数でありかつ連続する平方数の和で表せる、10^8 未満のすべての数の合計を求めよ。
brute force以外の何物でもないけど22秒で止まったのでいいや。回文数の判定がちょっと汚い気がする。もっと綺麗にやる方法ないだろうか。
is.palindome <- function(n){ sum(!(unlist(strsplit(as.character(n), "")) == rev(unlist(strsplit(as.character(n),""))))) <= 1 } limit <- 1e8 i <- 1 init <- 1 ans <- numeric(0) count <- 0 repeat{ tmp <- init^2 if(tmp > limit) break i <- init repeat{ i <- i + 1 tmp <- tmp + i^2 if(tmp > limit) break if(is.palindome(tmp)){ count <- count + 1 ans[count] <- tmp } } init <- init + 1 } sum(unique(ans))