Не используйте Erathostenes - это слишком медленно, если вам не нужны все простые числа в диапазоне.
Вот лучший способ факторизации заданного числа. Функция возвращает карту, где ключи - это главные факторы n, а значения - их степени. Например. для 13195 это будет {5: 1, 7: 1, 13: 1, 29: 1}
Это сложность O (sqrt (n)):
public static Map<Integer, Integer> Factorize(int n){
HashMap<Integer, Integer> ret = new HashMap<Integer, Integer>();
int origN = n;
for(int p = 2; p*p <= origN && n > 1; p += (p == 2 ? 1: 2)){
int power = 0;
while (n % p == 0){
++power;
n /= p;
}
if(power > 0)
ret.put(p, power);
}
return ret;
}
Конечно, если вам нужен только наибольший простой множитель, вы можете вернуть только последнее p, а не всю карту - сложность та же.