Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,47 @@
sexy_prime_group(1, N, _, [N]):-
is_prime(N),
!.
sexy_prime_group(Size, N, Limit, [N|Group]):-
is_prime(N),
N1 is N + 6,
N1 =< Limit,
S1 is Size - 1,
sexy_prime_group(S1, N1, Limit, Group).
print_sexy_prime_groups(Size, Limit):-
findall(G, (is_prime(P), P =< Limit, sexy_prime_group(Size, P, Limit, G)), Groups),
length(Groups, Len),
writef('Number of groups of size %t is %t\n', [Size, Len]),
last_n(Groups, 5, Len, Last, Last_len),
writef('Last %t groups of size %t: %t\n\n', [Last_len, Size, Last]).
last_n([], _, L, [], L):-!.
last_n([_|List], Max, Length, Last, Last_len):-
Max < Length,
!,
Len1 is Length - 1,
last_n(List, Max, Len1, Last, Last_len).
last_n([E|List], Max, Length, [E|Last], Last_len):-
last_n(List, Max, Length, Last, Last_len).
unsexy(P):-
P1 is P + 6,
\+is_prime(P1),
P2 is P - 6,
\+is_prime(P2).
main(Limit):-
Max is Limit + 6,
find_prime_numbers(Max),
print_sexy_prime_groups(2, Limit),
print_sexy_prime_groups(3, Limit),
print_sexy_prime_groups(4, Limit),
print_sexy_prime_groups(5, Limit),
findall(P, (is_prime(P), P =< Limit, unsexy(P)), Unsexy),
length(Unsexy, Count),
writef('Number of unsexy primes is %t\n', [Count]),
last_n(Unsexy, 10, Count, Last10, _),
writef('Last 10 unsexy primes: %t', [Last10]).
main:-
main(1000035).

View file

@ -0,0 +1,42 @@
:- module(prime_numbers, [find_prime_numbers/1, is_prime/1]).
:- dynamic is_prime/1.
find_prime_numbers(N):-
retractall(is_prime(_)),
assertz(is_prime(2)),
init_sieve(N, 3),
sieve(N, 3).
init_sieve(N, P):-
P > N,
!.
init_sieve(N, P):-
assertz(is_prime(P)),
Q is P + 2,
init_sieve(N, Q).
sieve(N, P):-
P * P > N,
!.
sieve(N, P):-
is_prime(P),
!,
S is P * P,
cross_out(S, N, P),
Q is P + 2,
sieve(N, Q).
sieve(N, P):-
Q is P + 2,
sieve(N, Q).
cross_out(S, N, _):-
S > N,
!.
cross_out(S, N, P):-
retract(is_prime(S)),
!,
Q is S + 2 * P,
cross_out(Q, N, P).
cross_out(S, N, P):-
Q is S + 2 * P,
cross_out(Q, N, P).