素因数分解して最後の素因数を表示すればよいでしょう。
Long
今まで使ってきたIntは32ビット符号付き整数です。与えられた整数はその範囲を超えています。Scalaには64ビット符号付き整数も用意されています。それがLongです。サフィックスLをつければLongになります。
val N = 600851475143L
List
ListはHaskellのそれと同じで、先頭からアクセスしていく列です。Listはこんな感じで作ります。
val a = List(3, 1, 4)
次は、先頭に要素をつけて新たなListを作っています。
val b = 5 :: a // List(5, 3, 1, 4)
先頭の要素はheadで取り出し、先頭の次からのListはtailです。
val n = b.head // 5 val c = b.tail // List(3, 1, 4)
さて、素因数分解は短い列にしかなりえないので、実体のある列を使ってもよいでしょう。2から順に割っていって商が除数の自乗より小さくなればそこで終わりです。
def factorize(n :Long, p :Long = 2L) :List[Long] = if(n == 1) Nil else if(p * p > n) List(n) else if(n % p == 0) n :: factorize(n / p, p) else factorize(n, p + 1) val N = 600851475143L val fs = factorize(N) println (fs.last)