Java (laboratorium)

zadanie nr 3

Zdefiniuj klasę usługową LiczbyPier w pakiecie narzedzia, która będzie posiadała tylko dwie metody statyczne: czyPierwsza testująca pierwszość zadanej liczby i naCzynnikiPierwsze tworząca rozkład liczby na czynniki pierwsze. Wykorzystaj do tego celu sito Eratostenesa, modyfikując je w ten sposób, że dla każdej liczby pamiętaj jej najmniejszy podzielnik pierwszy (będzie to trik pomocny przy wyliczaniu rozkładu liczby na czynniki pierwsze). Wymienione funkcje powinny udzielać poprawnych odpowiedzi dla wszystkich liczb typu long (nie możesz utworzyć tak dużego sita, więc zastanów się jak ten problem obejść algorytmicznie). Na dokładkę zdefiniuj kasę LiczbyPier tak, aby nie można było stworzyć jej instancji.

public class LiczbyPier
{
    private final ststic int POTEGA2 = 21 ;
    protected final static long[] SITO = new long[1<<POTEGA2] ;
    // ...
    public static boolean czyPierwsza (long x)
    { /* ... */ }
    public static long[] naCzynnikiPierwsze (long x)
    { /* ... */ }
}

Następnie napisz program, który będzie wypisywał na standardowe wyjście System.out rozkład wszystkich liczb całkowitych przekazanych do programu poprzez parametry wywołania. Jeśli wczytana liczba będzie niewłaściwa, to program powinien wypisać stosowny komunikat na standardowe wyjście związane z błędami System.err. Przykładowo, po wydaniu polecenia:

> java Rozklad -9223372036854775808 -12 -2 -1 0 1 2 75 10460353203

program powinien wypisać:

-9223372036854775808 = -1*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*
2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2
-12 = -1*2*2*3
-2 = -1*2
-1 = -1
0 = 0
1 = 1
2 = 2
75 = 3*5*5
10460353203 = 3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3*3

przy założeniu, że klasa z programem nazywa się Rozklad.

Program należy opatrzeć stosownymi komentarzami dokumentacyjnymi i na końcu wygenerować dokumentację poleceniem javadoc.

Paweł Rzechonek

Wrocław, 14 października 2004.