Problem 5

2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。

では、1 から 20 までの整数全てで割り切れる数字の中で最小の値はいくらになるか。

Problem 5 - PukiWiki

数学的素養が大変残念な感じなので最小公倍数のとこだけWikipediaを見るなどした…
メモ:gcd = 最大公約数, lcm = 最小公倍数

Ruby

reuire 'mathn'
puts (1..20).inject{|v,i| v.lcm(i)}

一瞬で終了。

R

gcd <- function(a,b) {
  if(b > a) {
    temp <- a
    a <- b
    b <- temp
  }
  if(b == 0) {
    return(a)
  }
  c <- a%%b
  if(c == 0) {
    return(b)
  } else {
    return(gcd(b,c))
  }
}

lcm <- function(a,b) {
  return(a*b%/%gcd(a,b))
}

x <- 1
for(i in 1:20) {
  x <- lcm(x,i)
}

print(x)

gcdとかlcmとかなさそうだったので自分で実装するなどした。実装したのはいいんだけど完全に手続き型で酷い。<-を=に置き換えて、あとfor文のあたり直せばほぼJavaScriptとかで動きそうな気が…

Haskell

print $ foldl lcm 1 [2..20]

これも一瞬で終了。


lcmが用意されてるかどうかで大きく明暗が分かれる結果に…