RosettaCodeData/Task/Population-count/Prolog/population-count.pro

13 lines
484 B
Prolog

is_evil(Number) :- popcount(Number) mod 2 =:= 0.
:- numlist(0, 29, Powers),
maplist([P0, P] >> (P is popcount(3 ^ P0)), Powers, PowerPopcounts),
numlist(0, 59, Numbers),
partition(is_evil, Numbers, EvilNumbers, OdiousNumbers),
writeln('The pop counts of the first 30 powers of 3 are:'),
writeln(PowerPopcounts),
writeln('The first 30 evil numbers are:'),
writeln(EvilNumbers),
writeln('The first 30 odious numbers are:'),
writeln(OdiousNumbers).