This will do it for any numbers that can be represented as some power of a distinct integer, and the list is still usable for calculation by releasing the hold, unlike converting to string, etc.
keepPowers[lst_] := Module[{powers, reps},
powers = HoldForm[#1^#2] & @@@ # & /@ FactorInteger[lst];
reps = lst[[#]] -> powers[[#]][[1]] & /@
Pick[Range@Length@lst, powers, _?(Length[#] == 1 &)];
Replace[lst, reps, 1]];
lst = {2^31, 1103515245, 12345, 12345, 3^30, 2^20*3^10, 5^5}
keepPowers[lst]
ReleaseHold[%]
(*
{2147483648, 1103515245, 12345, 12345, 205891132094649, 61917364224, 3125}
{2^31, 1103515245, 12345, 12345, 3^30, 61917364224, 5^5}
{2147483648, 1103515245, 12345, 12345, 205891132094649, 61917364224, 3125}
*)