Jak szybko sprawdzić w Java'ie czy dowolnie duża liczba jest pierwsza? :-)
Odpowiedź:
Użyć metody
isProbablePrime(int)
klasy BigInteger
:-)Dzięki temu, że metoda ta używa testu prawdopodobieństwa Miller'a-Rabina, możemy by z prawdopodobieństwem 1-1/1024 ustalić czy dana liczba jest liczbą pierwszą, użyć kodu:
Przy okazji
BigInteger bi = new BigInteger(str);if (bi.isProbablePrime(10)) { System.out.println(bi+" is [probably ;-)] prime :-)");}By zrobić to z prawdopodobieństwem 1-1/1048576 wystarczy jako parametr do metody
isProbablePrime(int)
przekazać 20 :-) W ogólności prawdopodobieństwo to jest równe 1-2-n ;-)Przy okazji
BigInteger
może nam także znaleźć liczbę prawdopodobnie pierwszą ;-)Czyż Java nie jest fajna? :-)
Podobne postybeta
Wydało się ;-)
Spadochronowy atak na Wawel - czyli wolne GWT
Droga do celu..
Java i liczby pierwsze, odsłona druga
Chmurka prawdopodobieństwa
Podobne postybeta
Wydało się ;-)
Spadochronowy atak na Wawel - czyli wolne GWT
Droga do celu..
Java i liczby pierwsze, odsłona druga
Chmurka prawdopodobieństwa
czy ta metoda jest chociaż deterministyczna? :D
OdpowiedzUsuń-------------
Racjonalny feveloper
Nie :-) jest oparta o algorytm probabilistyczny, dlatego trzeba podać jej stopień pewności jaki chcemy osiągnąć.
OdpowiedzUsuńAle działa tak, że liczba pierwsza test przejdzie na pewno, a liczba, która nie jest pierwsza przejdzie test pozytywnie tylko w 1 na 2^n przypadków.
Witam, wiem że to stary post, ale trafiłem na niego szukając informacji o BigInteger w javie, z tego co wyczytałem w dokumentacji to metoda którą opisujesz nie nazywa się isProbablyPrime tylko isProbablePrime: http://java.sun.com/javase/6/docs/api/java/math/BigInteger.html#isProbablePrime(int)
OdpowiedzUsuń@wlk: masz czałkowitą racje, nie wiem jak mi to mogło przejść, bo wydaje mi sie, że wklejałem kod z Eclipse'a :-) Widać, jednak musiałem go ręcznie "przepisać":-)
OdpowiedzUsuńDzięki za uwagę, już poprawiam.