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++11 (judge verdict: Memory Limit Exceeded)

#include<bits/stdc++.h>
#define N 1000000001
using namespace std;
int a[N+9];
void sieve()
{
  int i,j,s=sqrt(N);
  for(i=4;i<=N;i+=2) a[i]=1;
  for(i=3;i<=s;i+=2){
    if(a[i]==0){
      for(j=i*i;j<=N;j+=2*i) a[j]=1;
    }
  }
}
int main()
{
  sieve();
 int n,i,j,f,g,k,tc=1,t;
 
 
 while(scanf("%d",&n)!=EOF)
 {
  printf("%d :",n);
    for(i=2;i<=n;i++)
    {
      if(a[i]==0){
        while(n%i==0){n=n/i;
        if(n%i==0){
  printf(" ");
        printf("%d",i);
      }
        }
      }
    }
    printf("\n");
  }
  return 0;
}