function a = je_prvocislo(c)
% je_prvocislo - test prvociselnosti
% a = je_prvocislo(c)
% c ... nezaporne cele cislo
% vystup:
% a ... 1 ('c' je prvocislo) nebo 0 ('c' neni prvocislo)
% priklad volani: je_prvocislo(12)

if nargin<1
    error('Zadejte vstup!')
elseif c<=0 || fix(c)~=c % 'c' musi byt kladne cele cislo (prirozene)
    error('Zadejte kladne cele cislo!')
end
% testujeme prvociselnost - cisla 1,2,3 jsou zpracovana zvlast:
if c == 1
    a = 0; % 1 neni prvocislo
    return; % koncime
elseif c==2 || c==3
    a = 1; % 2 a 3 jsou prvocisla
    return;
end

% --------------- asi nejvic efektivni zpusob (slabinou je funkce 'mod'):
if c==5 || c==7  % 5 a 7 jsou prvocisla, zpracujeme je zvlast
    a = 1;
    return;
end
if mod(c,2)==0 || mod(c,3)==0 % nejprve proverime delitelnost 2 a 3
    a = 0; % 'c' je delitelne 2 nebo 3, koncime
    return;
end

odm = ceil(sqrt(c)); % odmocnina z 'c' zaokrouhlena nahoru
for k=1:ceil(odm/6) % dale proverime delitelnost cisly 5,7,11,13,17,19,...
    if mod(c,6*k-1)==0 || mod(c,6*k+1)==0
        a = 0; % 'c' neni prvocislem
        return;
    end
end
a = 1; % cislo 'c' nebylo delitelne nicim