Простые числа в Java - Алгоритмы

Я начал изучать код на Java и решил, что буду использоватьПроект Эйлер сайт, чтобы дать мне небольшие задачи, чтобы попробовать и дополнить каждый бит нового кодирования, который я изучаю. Вот и я наткнулсяПроблема 3:

Основными факторами 13195 являются 5, 7, 13 и 29. Какой самый большой главный фактор числа 600851475143?

Я подумал о проблеме и исследовал множество различных теорий о простых числах и о том, как их можно найти с помощью различных различных вычислений (в качестве примера используется Sieve of Eratosthenes), и решение, которое я придумал, состояло в том, чтобы проверить числа от 2 -> n и посмотреть, они были бы простым числом, если бы они были тогда, я бы разделил переменную Tn (в данном случае 600851475143) на вновь открытое простое число и посмотрел бы, был ли это фактор. Если бы это было так, я бы назначил его переменной Hp (наивысшее простое число) и в конце программы вывел бы Hp на консоль, чтобы получить мой результат.

Вот мой код:

public class Largest_Prime_Factor_NEW_SOLUTION {

    static long Tn = 600851475143L;
    static long Hp = 0;
    static boolean isPrime = false;

    public static void main(String[] args) {

        for (long i=2; i<Tn; i++) {
            System.out.println("TESTING NUMBER " + i);
            for (long k=2; k < i; k++) {
                if (i % k == 0) {
                    System.out.println(i + " IS NOT A PRIME");
                    break;
                } else if (k + 1 == i) {
                    isPrime = true;
                }
            }

            if (isPrime) {
            System.out.println(i + " IS A PRIME");
            if (Tn % i == 0) {
                System.out.println(Tn + " IS DIVISIBLE BY " + i);
                Hp = i;
            } else {
                System.out.println(Tn + " IS NOT DIVISIBLE BY " + i);
            }
            }

            isPrime = false;
        }
        System.out.println("THE HIGHEST PRIME NUMBER OF " + Tn + " IS " + Hp);
    }
}

Теперь я знаю, что этот код очень неэффективен, и для начала мне удалось сжать его с того места, с которого я начал (везде были циклы!), Но я спрашиваю, как я могу улучшить это? Это поглощает меня, потому что все, что я исследую, противоречит тому, что делают другие, и это очень запутанно. Я пробовал метод sieve, но я понимаю, что логический массив может быть только массивом int, а не длинным массивом?

Я понимаю, что когда я начну писать код, я буду ограничен тем, какие знания я могу использовать, но просто из интереса я стремлюсь увидеть, каким будет окончательное решение.

Ответы на вопрос(6)

Ваш ответ на вопрос