Нет, он сразу заканчивается, поскольку
i == 0
не будет удерживаться на первой итерации.
Возможно, вы хотели написать что-то вроде этого:
public class Test {
public static void main(String[] args) {
long thing = 600851475143L;
for (long i = 16857 /* 300425737571L */; i > 0; i--) {
if (thing % i == 0) {
long answer = i;
// Print the largest prime factor, then break loop (and quit)
System.out.println(answer);
break;
}
}
}
}
Однако этот наивный метод факторизации крайне неэффективен.Поскольку факторизация 600851475143
равна 71 * 839 * 1471 * 6857
, вам нужно будет выполнить итерации от 300425737571 до 6857 и выполнять каждый раз по модулю.Существует много не очень сложных методов, которые бы мгновенно решали факторизацию.