Я попытался найти наибольший простой множитель числа 600851475143 и преуспел с помощью приведенного ниже кода, но я знаю, что это жестокий силовой путь, и, вероятно, есть более эффективный и элегантный способ решения этой проблемы. Тем не менее, я не мог думать ни о чем сразу и надеялся, что кто-то может поделиться своими решениями с объяснением.
public class Solution {
// find prime numbers
ArrayList<Long> primelist = new ArrayList<>();
ArrayList<Long> findPrime(Long num) {
for (Long i = Long.valueOf(2); i <= num; i++) {
if (num % i == 0) {
primelist.add(i);
num = num / i;
if (num == 1) {
break;
}
}
}
System.out.println(primelist);
return primelist;
}
public static void main(String[] args) {
Solution sol = new Solution();
sol.findPrime(Long.valueOf(600851475143L)); // [71, 839, 1471, 6857]
}
}