Problem:
Prime Factorization

Factorize a given integer n.

Input

n

An integer n is given in a line.

Output

Print the given integer n and :. Then, print prime factors in ascending order. If n is divisible by a prime factor several times, the prime factor should be printed according to the number of times. Print a space before each prime factor.

Constraints

2 ≤ n ≤ 109

Sample Input 1

12

Sample Output 1

12: 2 2 3

Sample Input 2

126

Sample Output 2

126: 2 3 3 7

Solution in Scala (judge verdict: Accepted)

import collection.mutable.ListBuffer
import io.StdIn

object Main extends App {

  def primeFact(n:Long):List[Long] = {
    val ret = ListBuffer.empty[Long]

    var num = n
    var root = 2L
    while(root * root <= num) {
      if(num % root == 0L) {
        ret += root
        num /= root
      }
      else root += 1L
    }

    (ret += num).toList
  }

  val n = StdIn.readLong

  val ans = primeFact(n)
  println(n + ": " + ans.mkString(" "))
}