main => Num is 1_000_000, statistics(runtime,[Start|_]), PrimeList = primes(Num), NumPrimes = PrimeList.len, statistics(runtime,[Stop|_]), RunTime = Stop - Start, printf("There are %w primes until %w [time(ms) %w]%n",NumPrimes, Num, RunTime), DiffList = [[1], [2], [2,2], [2,4], [4,2], [2,4,6], [2,6,4], [4,2,6], [4,6,2], [6,2,4], [6,4,2],[6,4,2,4]], run(DiffList, PrimeList). primesByDiffs([],_,[]). primesByDiffs([Prime|Primes], Diff, [Slide|Slides]):- Slide = new_list(Diff.len+1), append(Slide, _, [Prime|Primes]), select(Diff, Slide),!, primesByDiffs(Primes, Diff, Slides). primesByDiffs([_|Primes], Diff, Slides):- primesByDiffs(Primes, Diff, Slides). select([],_). select([Diff|Diffs],[S1, S2|Stail]):- S2 = S1 + Diff, select(Diffs, [S2|Stail]). run([],_). run([Diff|Dtail], PrimeList):- statistics(runtime,[Start|_]), primesByDiffs(PrimeList, Diff, SlideList), Num = SlideList.len, statistics(runtime,[Stop|_]), Runtime = Stop - Start, printf("%-10w number: %5w (%2wms) first: %-22w last: %-22w\n", Diff, Num, Runtime, SlideList.first, SlideList.last), !, run(Dtail, PrimeList).