Problem 64 - Project Euler
問題の意味を理解するのにも,解法を考えるのにも時間がかかった.この問題は力技ではいかない(無理数がある程度以上の精度で計算できたら別だけど)のでちょっと難しかった.
計算時間は5秒くらい.まあ多少かかったといえばかかった感じはあるけど,方法さえ分かればそれなりにすんなり行くヤツは解いてて楽しい.
あとあまり分からなかったけど参考にしたっていえばした.
Wikipediaの数学用語の説明って分かってから見直すとなんてことないんだけど,分からないときに見てもさっぱり理解できないことが多い.
how.period <- function(n){ o <- sqrt(n) if(o%%1 == 0) return(0) a <- floor(o) p1 <- p <- n - a^2 l1 <- l <- a count <- 0 repeat{ a <- floor(p/(o-l)) p <- (n - l^2)/p l <- a*p - l count <- count+1 if(p==p1 && l==l1) break } count } count <- 0 for(i in 2:10000){ if(sqrt(i)%%1 == 0) next if(how.period(i) %% 2 == 1) count <- count+1 }