#include <stdio.h>
#include <math.h>

#define _MAX 10000
typedef struct _x {
int x;
int y;
int z;
} X;

X num[_MAX+1];

int countlist(int i, int c)
{
  if (num[i].y == 0) {
    return c;
  } else {
    c++;
    return countlist(num[i].x, c);
  }
}
void printlist(int i)
{
  if (num[i].y == 0) {
    printf("%d", num[i].x);
  } else {
    printf("%d * ", num[i].y);
    printlist(num[i].x);
  }
}

int main()
{
  int i, j, x, max = 0, c, nu;

  for (i=1; i<=_MAX; i++) {
    num[i].x = i; num[i].y = 0; num[i].z = 0;
  }
  for (i = 2; i <= _MAX; i += 2) {
    if (2 != num[i].x){
      num[i].x /= 2; num[i].y = 2; num[i].z++;
    }
  }
  x = sqrt(_MAX);
  for (i = 3; i <= x; i++) {
    if (num[i].z != 0){
      continue;
    }
    for (j = i; j <= _MAX; j += i) {
      if (i != num[j].x && num[j].z == 0) {
        num[j].x /= i; num[j].y = i; num[j].z++;
      }
    }
  }

  for (i = 1; i <= _MAX; i++) {
    c = countlist(i, 1);
    if (max < c) {
      max = c; nu = i;
    }
  }
  printf("%d = ", nu);
  printlist(nu);
  printf("\n因子数：%d\n",max);

  return 0;
}
