import scala.annotation.tailrec import scala.io.StdIn object Problem312 { def primeFactorization(n: Long): Seq[Long] = { @tailrec def factor(n: Long, div: Long, result: Seq[Long]): Seq[Long] = { if (n < div * div) { n +: result } else if (n % div == 0) { factor(n / div, div, div +: result) } else { factor(n, div + 1, result) } } factor(n, 2, Nil) } def proc(n: Long): Long = { val pf = primeFactorization(n) val minPrime = pf.filter(_ != 2).reduceOption(_ min _).getOrElse(n) val minComposite = pf.sorted.take(2).product minPrime min minComposite } def main(args: Array[String]) { val n = StdIn.readLong() val result: Long = proc(n) println(result) } }