Daca parcurgi cu un for(i=1;i<=n;i++) vectorul de numere prime, cand gasesti un divizor scrie i--; ca mai incerce inca o data acel divizor.
Eu am facut altfel:
#include<iostream>
using namespace std;
int n,div[1000000],i,j,m;
int main(){
cin>>n;
m=n;
i=2;
while(n!=1){
if(n%i==0){
div[i]++;
n/=i;
}
else
i++;
}
cout<<m<<"=";
for(i=2;i<=m;i++)
if(div[i]){
cout<<i<<"^"<<div[i]<<"*";
}
return 0;
}