27 lines
730 B
Prolog
27 lines
730 B
Prolog
isPrime(2).
|
|
isPrime(N):-
|
|
between(3, inf, N),
|
|
N /\ 1 > 0, % odd
|
|
M is floor(sqrt(N)) - 1, % reverse 2*I+1
|
|
Max is M div 2,
|
|
forall(between(1, Max, I), N mod (2*I+1) > 0).
|
|
|
|
primeSum([], _, _, []).
|
|
primeSum([P|PList], Index, Acc, [Index|CList]):-
|
|
Sum is Acc + P,
|
|
isPrime(Sum),!,
|
|
format('~|~t~d~3+ ~|~t~d~3+ ~|~t~d~5+', [Index, P, Sum]),nl,
|
|
Index1 is Index + 1,
|
|
primeSum(PList, Index1, Sum, CList).
|
|
primeSum([P|PList], Index, Acc, CntList):-
|
|
Index1 is Index + 1,
|
|
Sum is Acc + P,
|
|
primeSum(PList, Index1, Sum, CntList).
|
|
|
|
do:-Limit is 1000,
|
|
numlist(1, Limit, List),
|
|
include(isPrime, List, PrimeList),
|
|
primeSum(PrimeList, 1, 0, CntList),
|
|
length(CntList, Number),
|
|
format('~nfound ~d such primes~n', [Number]).
|