IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Výpis dělitelů

Aktivity
Avatar
Jan Ulrich
Člen
Avatar
Jan Ulrich:16.4.2017 14:26

Ahoj, sesmolil jsem si algoritmus na výpis dělitelů, dělím postupně do odmocniny, v případě nulového zbytku uložím do pole, do dalšího pole rovnou uložím (cislo/získaný dělitel + podmínka aby např při čísle 49 nebyla 2x uložena 7). Potom pole seřadím a pole s nenulovou hodnotou vypíšu. řekl bych že to funguje, ale zdá se mi to takové "kostrbaté". Mohl by někdo zkušenější poradit jak prográmek trochu "učesat". Např. jak to udělat abych si předem nemusel definovat zbytečně velké pole apod..Jde to udělat i bez použití pole normálním výpisem (dělit až do poloviny daného čísla), ale v případě velkých čísel velmi pomalé. Dík za každou radu.

public class Delitele {
    public int pocetDelitelu = 0;

    double[] pole = new double[100000];
    public void zjistiDelitele(double cislo){


        for (double i = 1; i <= Math.sqrt(cislo); i++){
            if (cislo % i == 0){

                pole[pocetDelitelu] = i;
                pocetDelitelu++;
                if (i != cislo/i){
                pole[pocetDelitelu] = cislo/i;
                pocetDelitelu++;
                }
            }
        }

        System.out.println("Dělitelé :");
        Arrays.sort(pole);
        for (int i = 0; i < pole.length; i++){
            if (pole[i] !=0){
            System.out.println(pole[i]);
            }
        }
        System.out.println("\nPočet dělitelů :" + pocetDelitelu);
    }

}
 
Odpovědět
16.4.2017 14:26
Avatar
CreeperFace
Člen
Avatar
CreeperFace:4.5.2017 11:10

Nevím zda jsem to dobře pochopil, ale

Set<Integer> delitele = new HashSet<>();
int pocetDelitelu = 0;

public void zjisitDelitele(int number) {
        for(int i = 1; i <= number; i++) {
                if(number % i == 0){
                        delitele.add(i);
                        pocetDelitelu++;
                }
        }
}

Pokud bys chtěl vypsat dělitele jako postupně od nejmenšího po největší tak možná by bylo lepší použít LinkedHashSet

 
Nahoru Odpovědět
4.5.2017 11:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.