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: Time Limit Exceeded)

#include <iostream>
#include <cmath>
using namespace std;

int isPrime(int n){
	int sq = sqrt((double)n);
	if(n==1)return 0;
	if(n==2)return 1;
	for(int i=2;i<=sq;++i)
		if(n%i==0)return 0;
	return 1;
}

int main() {
	int n,p;
	cin>>n;
	
	cout<<n<<":";
	while(!(n%2)){
		cout<<" "<<2;
		n /= 2;
	}
	
	for(int p=3;p<=n;p+=2){
		if(isPrime(p)){
			while(!(n%p)){
				cout<<" "<<p;
				n /= p;
			}
		}
	}
	cout<<endl;
	
	return 0;
}