Liczby pierwsze
Uses Crt;
Var
Liczba,Mozliwosci:Integer;
Pierwsza:Boolean;
Key:Char;

Begin
Repeat
Pierwsza:=True;
Write('Podaj Liczb©:');Readln(Liczba); {wczytuje liczbe od uzytkownika}
Mozliwosci:=1; {ustala wstepna wartosc mozliwosci.. dzielenie przez wszystkie liczby od 2
do 1 mniej niz podana liczba, liczba pierwsza dzieli sie przecierz tyko przez siebie i 1 :) }
While ((Pierwsza)and(Mozliwosci< Liczba-1)) do
Begin
Inc(Mozliwosci); {zwiekszenie zmiennej mozliwosci o 1}
if Liczba mod Mozliwosci=0 then {jezeli przy dzieleniu nie ma reszty, znaczy ze liczba dzieli sie przez cos wiecej niz
tylko 1 i siebie sama (te dwie mozliwosci sa oczywiscie z miejsca wykluczone)}
Begin
Pierwsza:=False; {od razu zatrzymanie petli.. po co szukac dalej i przedluzac dzialanie programu?}
writeln('Znalazlem dzielnik:',Mozliwosci,' (',Liczba,' div ',mozliwosci,'=',Liczba div mozliwosci,')');
{wypisanie dzielnika na jakim sie zatrzymal program..dodalem to w fazie testow, mozesz to spox usunac}
end;
end;
write('Podana Liczba to ',liczba,' i '); {wypisanie wstepi i podaj liczby}
if NOT Pierwsza then write('nie '); {jezeli znaleziono inny dzielnik niz 1 i liczba to pierwsza=false, czyli NOT true}
writeln('jest liczba pierwsza.');
writeln('Nastepna liczba? (T/N)');
repeat {petla}
Key:=UpCase(Readkey); {Readkey- czekaj na wcisniecie klawisza i podstaw jego wartosc do Key
UpCase- wyklucza mozliwosc wcisniecia malego t lub n zamieniajac je po prostu na duze litery}
Until ((Key='N')or(Key='T')); {koniec petli kiedy nacisnie T lub N}
writeln; {linijka odstepu na wypadek wybrania T nie ma sensu dopisywac warunku bo tutaj albo program sie skonczy i
nikt nie zauwazy tej linijki albo bedzie trwal dalej i linijka bedzie potrzebna, dodanie "if...then.." tylko
zwiekszylo i spowolnilo by ostatecznie program }
Until Key='N';
End.