Ilość dzielników liczby – algorytm w Javie oraz jego optymalizacja. Teoria liczb #1

package pl.am.liczby.dzielniki;

public class IloscDzielnikow {
    public static int iloscDzielnikow(long liczba) {
        int ilosc = 0;
        for (long i=1; i<=liczba; i++) {
            if (liczba%i == 0) {
                ilosc++;
                System.out.println(i);
            }
        }

        return ilosc;
    }

    public static int iloscDzielnikow2(long liczba) {
        if (liczba == 1) {
            return 1;
        }
        int ilosc = 2;
        for (long i=2; i<liczba; i++) {
            if (liczba%i == 0) {
                ilosc++;
                System.out.println(i);
            }
        }

        return ilosc;
    }

    public static int iloscDzielnikow3(long liczba) {
        if (liczba == 1) {
            return 1;
        }
        int ilosc = 2;
        long max = liczba/2;
        for (long i=2; i<=max; i++) {
            if (liczba%i == 0) {
                ilosc++;
                System.out.println(i);
            }
        }

        return ilosc;
    }

    public static int iloscDzielnikow4(long liczba) {
        if (liczba == 1) {
            return 1;
        }
        int ilosc = 2;
        double max = Math.sqrt(liczba);
        for (long i=2; i<=max; i++) {
            if (liczba%i == 0) {
                long wynikDzielenia = liczba/i;
                if (i == wynikDzielenia) {
                    ilosc++;
                    System.out.println(i);
                } else {
                    ilosc += 2;
                    System.out.println(i);
                    System.out.println(wynikDzielenia);
                }

            }
        }

        return ilosc;
    }


    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        System.out.println("Ilosc dzielników: " + iloscDzielnikow4(36));
        long stop = System.currentTimeMillis();
        long czas = stop - start;
        System.out.println("czas = " + czas);
    }
}

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *