Prime Numbers in Java - Algorytmy

Zacząłem uczyć się kodować w Javie i postanowiłem użyćProjekt Euler Strona, która daje mi niewiele zadań, aby spróbować i uzupełnić każdy nowy kod, którego się uczę. Więc natknąłem sięProblem 3:

Pierwszymi czynnikami 13195 są 5, 7, 13 i 29. Jaki jest największy współczynnik pierwszorzędowy liczby 600851475143?

Pomyślałem o tym problemie i zbadałem wiele różnych teorii na temat liczb pierwszych i jak można je znaleźć za pomocą różnych obliczeń (przykładem jest sito Eratostenesa), a rozwiązaniem, które wymyśliłem, było przetestowanie liczb od 2 -> n i sprawdzenie, czy były one liczbą pierwszą, gdyby były, to dzieliłbym zmienną Tn (w tym przypadku 600851475143) przez nowo odkrytą liczbę pierwszą i zobaczyłbym, czy to był czynnik. Gdyby tak było, przypisałbym go do zmiennej Hp (najwyższa liczba pierwsza), a na końcu programu wyświetliłbym Hp na konsoli, aby dać mój wynik.

Oto mój kod:

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);
    }
}

Teraz wiem, że ten kod jest bardzo nieefektywny i do jego uruchomienia udało mi się skondensować go z miejsca, w którym zacząłem (wszędzie były pętle!), Ale pytam, jak mogę to poprawić? To odejście ode mnie, ponieważ wszystko, co badam, przeczy temu, co zrobiliby inni, i jest bardzo mylące. Próbowałem metody sieve, ale rozumiem, że tablica boolowska może być tylko tablicą int i nigdy długą tablicą?

Rozumiem, że kiedy zacznę kodować, ograniczę się do tego, jakiej wiedzy mogę użyć, ale po prostu nie interesuje mnie, aby zobaczyć, jakie będzie ostateczne rozwiązanie.

questionAnswers(6)

yourAnswerToTheQuestion