% Aufg.1  

% zw(+integer, +integer, +integer)
zw(A,B,X):- A=<X, X=<B.
% ?- zw(5,8,X).        Fehler: Argument X von =< ist nicht instantiiert.

% zwischen(+integer, +integer, ?integer)
% zwischen(A,B,X)  X ist zwischen A und B (inklusive).
zwischen(A,B,A):- A=<B.
zwischen(A,B,X):- A<B, A1 is A+1, zwischen(A1,B,X).


% Aufg.2

% teilt(+integer, +integer)
% teilt(T,N)  T teilt N.             Fehler, wenn T=0.
teilt(T,N):- N mod T =:= 0.

% teiler(?integer, +integer)
% teiler(T,N)  N>0 und T ist Teiler von N.
teiler(T,N):- zwischen(1,N,T), teilt(T,N).


% Aufg. 3

% zusammengesetzt(+integer)
% zusammengesetzt(N)  N ist eine zusammengesetzte Zahl.
zusammengesetzt(N):- M is floor(N/2), zwischen(2,M,T), teilt(T,N).

% primzahl(+integer)
% primzahl(P)  P ist Primzahl.
primzahl(P):- P>1, \+ zusammengesetzt(P).

% primzahl_kleinergleich(?integer, +integer)
% primzahl_kleinergleich(P,N)  P ist eine Primzahl kleinergleich N.
primzahl_kleinergleich(P,N):- zwischen(1,N,P), primzahl(P).
