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)

// Elementary Number Theory - Prime Factorize
// http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=NTL_1_A
using System;
using System.Linq;
using System.Collections.Generic;

namespace NTL_1_A {
	class Program {
		public Program() {}
		
		public static void Main() {
			new Program().Calc();
		}
		
		void Calc() {
			var n = int.Parse(Input);
			var factors = Factorize(n).Select(i => i.ToString())
									.Aggregate((i, j) => i + " " + j);
			
			Output(n + ": " + factors);
		}
		
		String Input {
			get {
				return Console.ReadLine();
			}
		}
		
		void Output(String str) {
			Console.WriteLine(str);
		}
		
		int[] Factorize(int n) {
			List<int> factors = new List<int>();

			if(n <= 0) return new int[] {0};
			if(n == 1) return new int[] {1};

			while(n % 2 == 0) {
				factors.Add(2);
				n /= 2;
			}
			while(n % 3 == 0) {
				factors.Add(3);
				n /= 3;
			}

			int factor = 5;
			int step = 2;
			while(factor * factor <= n) {
				if(n % factor == 0) {
					factors.Add(factor);
					n /= factor;
				} else {
					factor += step;
					step = 6 - step;
				}
			}
			if(n != 1) factors.Add(n);
			return factors.ToArray();
		}
	}
}