Estou tentando desenvolver um algoritmo que exiba a fatoração dos números ex: √12 = 2√3, porém o máximo que consegui foi fazer o programa exibir 2x2x3, alguém sabe como resolver isso?

private static ArrayList<Integer> primos;
private static ArrayList<Integer> fatores;
private static ArrayList<Integer> elevado;
private static int num;
private static int aa;
private static int pro;

public static void main(String[] args) 
{
    elevado = new ArrayList<Integer>();

    Scanner sc = new Scanner(System.in);
    num = sc.nextInt();

    primos = new ArrayList<Integer>();

    for (int i = 2; i < 1000; i++) 
    {
        boolean flag = true;
        for (int j = 2; j < i - 1; j++) 
       {
            if (i % j == 0)
            {
                flag = false;
                break;
            }
        }
        if (flag == true) 
        {
            primos.add(i);
        }
    }

    fatores = new ArrayList<Integer>();

    while (num % primos.get(pro) != 0)
    {
        ++pro;
    }
    
    while (num % primos.get(pro) == 0) 
    {
        fatores.add(primos.get(pro));
        num = num / primos.get(pro);

        if (num % primos.get(pro) != 0)
        {
           ++pro;
        }
        
    }
    
    if(num !=1)
    {
      fatores.add(num);
    }

      System.out.println(fatores);
      sc.close();
      paraRaiz();
    
}

private static void paraRaiz()
 {

 
 }

Use HashMap

// <fator, qtd>
HashMap<Integer, Integer> map;

for (Integer f : fatores) {
  int qtd = map.getOrDefault(f, 0);
  map.put(f, qtd + 1);
}

for (Map.Entry<Integer, Integer> item: map.entrySet()) {
  System.out.println("Map tem o fator " + item.getKey() + " repetido " + item.getValue() + " vezes");
}
1 curtida

Tentarei isso, vlw.