18.

72 2
36 2
18 2
9 3
3 3
1

int n;
int p[100100000];
// p[k] = 0, ako k jeste prost
// p[k] = 1, ako k nije prost
int main() {
  int k, u;
  int m;
//  scanf(“%d”, &n);
  n = 100000000;
  // n = int.parseInt(Console.ReadLine());
  k = 2;
// Formiranje Eratostenovog sita do 
// zadatog broja n, tj. odredjivanje
// svih prostih brojeva u intervalu [2,n]
  while (k * k <= n) {
   if (p[k] == 0) {
     u = 2 * k;
     while (u <= n) {
     p[u] = 1;
     u = u + k;
  }
}
k++;
  }
// Ucitavamo broj koji hocemo da faktorisemo
  scanf(“%d”, &m);
  k = 2;
  while (m != 1) {
   if (p[k] == 0) {  // Znaci broj k je prost
     while (m % k == 0) {
     printf(” %d”, k);
     m = m / k;
  }
}
k++;
  }
}