オイラーのφ関数は前に書いたように、
なので、
です。素数を昇順に掛けていくだけですね。
def is_prime(n :Int) = Iterator.from(2).takeWhile(p => p * p <= n).forall(n % _ != 0) def primes() = Iterator.from(2).filter(is_prime) val N = 1e6.toInt println (Iterator.iterate((1, primes))(x => (x._1 * x._2.next(), x._2)). map(_._1).takeWhile(N >=).max)