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<stdio.h>
#include<math.h>

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

int main(void)
{
    int n, max, i;
    scanf("%d", &n);
    max = sqrt(n);
    printf("%d:");
    while (n % 2 == 0) {
        printf(" 2");
        n %= 2;
    }
    for (i = 3; i <= max; i += 2) {
        if (isPrime(i)) {
            while (n % i == 0) {
                printf(" %d", i);
                n %= i;
            }
        }
    }
    printf("\n");
}