Problem 75

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)の整数倍をカウントしてく感じ。もうちょっと計算に気を使ったら早くなりそうな気はする。