prime.pl

loading
details
attribute value
description
owner Johannes Waldmann
uploaded 2017-08-17 03:45:08.0
disk size 1.03 KB
downloadable true
type
attribute value
name no_type
processor id 1
description this is the default benchmark type for rejected benchmarks and benchmarks that are not associated with a type.
owning community none
loading contents
%Source: Random examples used for debugging termination analysis for arithmetic Prolog programs
% terminating
%query:isPrime(b)
% true if Cand is a prime
isPrime(Cand) :- Cand > 0, isNotMultipleOfRange(2, Cand - 1, Cand).

% true if there is no Low <= x <= High such that Cand mod x = 0
isNotMultipleOfRange(Low, High, Cand) :- Low > High, !.
isNotMultipleOfRange(Low, High, Cand) :- Low =< High, !, isNotMultipleOf(Low, Cand), isNotMultipleOfRange(Low + 1, High, Cand).

% true if there is no x such that Factor * x = Multiple
isNotMultipleOf(Factor, Multiple) :- checkNotMultipleRange(0, Multiple, Factor, Multiple).

% is true if there is no value Low <= x <= High such that Factor * x = Multiple
checkNotMultipleRange(Low, High, Factor, Multiple) :- Low > High, !.
checkNotMultipleRange(Low, High, Factor, Multiple) :- Low =< High, !, checkNotMultiple(Low, Factor, Multiple), checkNotMultipleRange(Low + 1, High, Factor, Multiple).

% true if Factor1 * Factor2 =\= Multiple
checkNotMultiple(Factor1, Factor2, Multiple) :- Multiple =\= Factor1 * Factor2.
popout

content may be truncated. 'popout' for larger text window.

actions get anonymous link download benchmark