program testPrvociselnostiI;
{ Vstup: číslo x (vejde se do integeru).
Výstup: řetězec 'ano', pokud je zadané číslo prvočíslo; v opačném případě 'ne'.
Myšlenka řešení: Postupně zkoušíme, zda je x dělitelné některým z menších čísel, než je ono samo (ale až od 2).
Právě tehdy když je alespoň jedním z nich x dělitelné, není x prvočíslo. }
var x,i : integer;
begin
read(x);
i:=2; { Dělitelnost číslem 1 nás nezajímá (1 není prvočíslo a dělí všechna ostatní čísla). Začneme tedy od 2.}
{ Dokud i nedělí číslo x, budeme zvyšovat i. To znamená, že postupně budeme zkoušet dělitelnost 2, 3, 4, ...
Kdy se zastavíme? Jakmile narazíme na dělitele čísla x. A zastavíme se určitě? Ano, nejpozději na čísle x. }
while (x mod i <> 0) do
i:=i+1; { To samé lze napsat příkazem inc(i); }
{ Jak teď poznáme, že je x prvočíslo? Právě tehdy, když ho žádné menší číslo než x nedělilo. To znamená, že
while-cyklus se zastavil až na i=x. }
if (i=x) then
writeln('ano')
else
writeln('ne');
end.
Kdo byste našel v nějakém z těchto programů chybu, dejte mi to vědět - můžete tak získat bonusové body (1 chyba ≈ 5 bodů). ;)