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 C# (judge verdict: Accepted)

using System;
using System.Linq;
using System.Collections.Generic;

public class Prime{
	public static void Main()
	{
		int n = int.Parse(Console.ReadLine());
		
		var primeFactors = PrimeFactors(n);
		//primeFactors.Dump();
		
		string output = primeFactors.Count() == 0 
						? n.ToString() 
						: string.Join(" ", primeFactors.Select (f => f.ToString()).ToArray());
						//:string.Join(" ", primeFactors);
		Console.WriteLine("{0}: {1}", n, output);
	}
	
	public static IEnumerable<int> PrimeFactors(int n)
	{
		int i = 2;
		int tmp = n;
		
		while (i <= n)
		{
			if(n % i == 0){
				n /= i;
				yield return i;
			}else{
				i++;
			}
			
			if(i > Math.Sqrt(tmp)){
				i = int.MaxValue; //???????????????
				yield return n;
			}
		}
	}
}