RosettaCodeData/Task/Perfect-numbers/Prolog/perfect-numbers-1.pro
Ingy döt Net b83f433714 tasks a-s
2013-04-10 23:57:08 -07:00

14 lines
341 B
Prolog

tt_divisors(X, N, TT) :-
Q is X / N,
( 0 is X mod N -> (Q = N -> TT1 is N + TT;
TT1 is N + Q + TT);
TT = TT1),
( sqrt(X) > N + 1 -> N1 is N+1, tt_divisors(X, N1, TT1);
TT1 = X).
perfect(X) :-
tt_divisors(X, 2, 1).
perfect_numbers(N, L) :-
numlist(2, N, LN),
include(perfect, LN, L).