trace
%Primszamok
DOMAINS
szam = prim;osszetett
PREDICATES
%Ismetles
nondeterm for(integer /*Mettol*/, integer /* futo*/)
%Kovetkezo primszam keresese
nondeterm kovetkezo(integer)
%Tedd el a szamot, ha prim!
tedd_el(szam, integer)
%Oszthato-e a szam a primszammal?
nondeterm oszthato(integer /*vizsgalt egesz*/, integer /*prim */, szam)
DATABASE
%Primszamok
p(integer)
CLAUSES
%Ismetles
for(Mettol,Mettol).
for(Mettol,Futo) if
Mettol1=Mettol+1,
for(Mettol1,Futo).
%Kovetkezo primszam keresese
%Oszthato valamelyik elozo primszammal, ne nezd tovabb mas primmel!
kovetkezo(12) if trace(off),fail. %Nyomkovetes leallitasa.
kovetkezo(N) if
p(P),oszthato(N,P,Milyen),
!,
tedd_el(Milyen,N).
kovetkezo(N) if % Nincs tobb primszam, vagy nincs meg primszam elteve.
tedd_el(prim,N).
%Oszthato-e a szam a primszammal?
oszthato(N,P,prim ) if
P*P>N,!. %Tul nagy a primszam, nem kell tovabb vizsgalni.
oszthato(N,P,osszetett) if
(N mod P)=0. %Igen.
%Tedd el a szamot, ha prim!
tedd_el(osszetett,_).
tedd_el(prim,N) if assertz(p(N)),write(N),write('\t').
GOAL
write("Meddig?"),
readint(Meddig),
retractall(p(_)), %Biztos, ami biztos, induljunk tiszta lappal!
for(2,N),
kovetkezo(N),
%Felso hatar ellenorzese
N>=Meddig,
!, % Vagas: vissza ne massz, ha ezutan nem sikerul valami!
nl,
save("prim.txt").