Má hledat prvočísla v rozsahu 2 až 100. První cyklus prochází tento rozsah (tj. 2, 3, 4, .... 99, 100), číslo se jmenuje i. Uvnitř tohoto cyklu se zjišťuje, zda je to prvočíslo. Hrubou silou by se to udělalo tak, že by otrocky podělil číslo i každým číslem z rozsahu 2 až i-1, číslo kterým dělí se jmenuje j. Ukončovací podmínka j <= i/j podle mého názoru zmenší počet iterací cyklu, protože nemá smysl zkoušet všechna čísla z rozsahu 2 až i-1. Koneckonců 6 není dělitelné č. 5.
Algoritmus zjišťuje, zda je číslo dělitelné jiným číslem. Pokud ano, modulo vrátí 0, pak je i dělitelné číslem j. Takže pokud uvnitř druhého cyklu vrátí modulo alespoň jednou 0, našel dalšího dělitele, a číslo není prvočíslo.
Pro případ č 6 vnitřní cyklus:
1. i = 6, j = 2. Podmínka j <= i/j vrátí true, protože i/j je 3. Následně i % j vrátí 0 a podmínka uvnitř druhého cyklu vrací true a proměnnou je prvocislo nastaví na false. v tuto chvíli už nemá smysl dále zkoumat číslo i, je jasné, že není prvočíslo.
2. i = 6, j = 3. Podmínka j <= i/j vrátí false, další iterace vnitřního cyklu neproběhne. Ani není nutná, že 6 není prvočíslo už víme.
3. výpis neprohěhne, proměnná jeprvocislo == false
Následuje další iterace vnějšího cyklu, kde i = 7 a opět se ve vnitřním cyklu zjišťuje, zda existuje další dělitel. Tentokrát v každé iteraci (asi bude opět jedna) vnitřního cyklu modulo vrátí nenulové číslo.
hu