%%%% prime2.pl %%%%
%  素数判定（試し割り）による素数の生成 
%
% ?- genPrime(Nから,Mまでの,素数リスト,開放尾部).
% ?- genPrime(2,10,L-T).
%  L= [2,3,5,7|T]
%  T= T

genPrime(N,M,[2|L]-Tail):- N=<2,!,genPrime(3,M,L-Tail).
genPrime(N,M,LTail):-  N<M,NN is N+((N+1) mod 2),genPrime2(NN,M,LTail).

:- mode genPrime2(integer,integer,-).
genPrime2(N,M,L-L):-N>M,!.
genPrime2(N,M,NL-Tail):-
	(isPrime(N,3)->NL=[N|L];NL=L),!,NN is N+2,genPrime2(NN,M,L-Tail).

:- mode isPrime(integer,integer).
isPrime(N,I):- I*I > N,!.
isPrime(N,I):- N mod I > 0,II is I+2,isPrime(N,II).
