Problem 75 - Project Euler
30秒。どうもここのところ時間がかかってばかりいる。
gcd <- function(a,b){ while(b!=0){ temp <- b b <- a%%b a <- temp } return(a) } limit <- 2000000 counts <- numeric(limit) mlim <- sqrt(limit) for(m in seq(2,mlim,by=2)){ n <- 1 repeat{ if(gcd(m,n)!=1){ n <- n+2 next } chk <- abs(m^2 - n^2) + 2*m*n + m^2+n^2 if(chk > limit) break s <- chk while(s < limit){ counts[s] <- counts[s]+1 s <- s+chk } n <- n+2 } } length(counts[counts==1])
原始ピタゴラス数(参考:ピタゴラスの定理 - Wikipedia)の整数倍をカウントしてく感じ。もうちょっと計算に気を使ったら早くなりそうな気はする。