% prolog check(I,C,M,P) :- P \= 0, I > M, write(C), nl. check(I,C,M,P) :- I =< M, P \= 0, NP is C mod I, NI is I + 2, check(NI,C,M,NP). check(I,C,M,0). primes(M) :- nl, primes(3,M,2,4). primes(C,M,S,T) :- C =< M, C > T, NS is S + 1, NT is NS * NS, check(3,C,NS,1), NC is C + 2, primes(NC,M,NS,NT). primes(C,M,S,T) :- C =< M, C =< T, check(3,C,S,1), NC is C + 2, primes(NC,M,S,T).