36 lines
1.1 KiB
Text
36 lines
1.1 KiB
Text
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).
|