Gyakorlati alapok

Számok osztói

 

Az előző, a Számok oszthatósága című fejezet már bevezette az oszthatóság vizsgálatának egyik lehetséges programozás-technikai megoldását:

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

a kulcsalgoritmus a maradékképzést (%) hívja segítségül, hiszen ha x szám y számmal való osztásakor a maradék 0, akkor x szám osztható y számmal.

 

if(x % y == 0)

 

Ebben a fejezetben az oszthatóság tulajdonságát iteráljuk, csakhogy végre egészen érthetetlenül fogalmazzak egészen egyszerű dolgokról.

 

A feladat tehát érthetően megfogalmazva, hogy listázzuk ki és alapszinten az olvashatóság végett formázzuk is meg az első 20 egész szám lehetséges osztóit! Nyilvánvalóan prímszám, az amelyiknek csak önmaga és 1 az osztója, ám ezzel a szűrési feltétellel most még ne foglalkozzunk (azaz a prímszámok bent fognak maradni a listában).

 

A probléma megoldásához nyakánál fogva meg kell ragadnunk klasszikus for ciklusunkat, még pontosabban 2 darabot belőle. Mindkettőt iterálva a külső főciklus adagolja majd az osztandót (i), a belső alciklus pedig az osztót (j). A kulcsfontosságú feltétel a fentiek alapján: if (i % j == 0). A főciklus csökkenő irányú (int i = 20; i >= 1; i--), míg a belső növekvő és mindig az éppen aktuális i léptetőig tart (i <= j).

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Main {
    public static void main(String[] args) {
        for (int i = 20; i >= 1; i--){
            System.out.print(i + " osztói: ");
            for(int j = 1; j <= i; j++)
                if (i % j == 0){
                    System.out.print(j + " ");
                }
            System.out.println();
        }
    }
}

 

Végeredmény:

20 osztói: 1 2 4 5 10 20
19 osztói: 1 19
18 osztói: 1 2 3 6 9 18
17 osztói: 1 17
16 osztói: 1 2 4 8 16
15 osztói: 1 3 5 15
14 osztói: 1 2 7 14
13 osztói: 1 13
12 osztói: 1 2 3 4 6 12
11 osztói: 1 11
10 osztói: 1 2 5 10
9 osztói: 1 3 9
8 osztói: 1 2 4 8
7 osztói: 1 7
6 osztói: 1 2 3 6
5 osztói: 1 5
4 osztói: 1 2 4
3 osztói: 1 3
2 osztói: 1 2
1 osztói: 1

 

Láthatjuk, hogy a leosztásba jócskán keveredtek prímszámok (például: 7 osztói: 1 7), ám ez nem probléma, hiszen ezt a feltételt szándékosan nem kezeltük le.

 

Ha a kiértékelési sorrendet meg akarjuk fordítani, akkor a főciklusban a ciklusléptetés irányát növekvőre kell cserélnünk (int i = 1; i <= 20; i++):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Main {
    public static void main(String[] args) {
        for (int i = 1; i <= 20; i++){
            System.out.print(i + " osztói: ");
            for(int j = 1; j <= i; j++)
                if (i % j == 0){
                    System.out.print(j + " ");
                }
            System.out.println();
        }
    }
}

 

Végeredmény:

1 osztói: 1
2 osztói: 1 2
3 osztói: 1 3
4 osztói: 1 2 4
5 osztói: 1 5
6 osztói: 1 2 3 6
7 osztói: 1 7
8 osztói: 1 2 4 8
9 osztói: 1 3 9
10 osztói: 1 2 5 10
11 osztói: 1 11
12 osztói: 1 2 3 4 6 12
13 osztói: 1 13
14 osztói: 1 2 7 14
15 osztói: 1 3 5 15
16 osztói: 1 2 4 8 16
17 osztói: 1 17
18 osztói: 1 2 3 6 9 18
19 osztói: 1 19
20 osztói: 1 2 4 5 10 20