Jump to content

Sexy primes: Difference between revisions

Added Prolog Solution
(Added Prolog Solution)
Line 1,441:
325 quadruplets, the last 3 being {{986131,986137,986143,986149},{990371,990377,990383,990389},{997091,997097,997103,997109}}
1 quintuplet, the last 1 being {{5,11,17,23,29}}
</pre>
 
=={{header|Prolog}}==
{{works with|SWI Prolog}}
<lang prolog>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).
sexy_prime_groups(_, P, Limit, []):-
P > Limit,
!.
sexy_prime_groups(Size, P, Limit, [Group|Groups]):-
sexy_prime_group(Size, P, Limit, Group),
!,
P1 is P + 1,
sexy_prime_groups(Size, P1, Limit, Groups).
sexy_prime_groups(Size, P, Limit, Groups):-
P1 is P + 1,
sexy_prime_groups(Size, P1, Limit, Groups).
 
print_sexy_prime_groups(Size, Limit):-
sexy_prime_groups(Size, 2, Limit, 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_prime(P):-
is_prime(P),
P1 is P + 6,
\+is_prime(P1),
P2 is P - 6,
\+is_prime(P2).
 
unsexy_primes(Limit, [2|P]):-
unsexy_primes(3, Limit, P).
 
unsexy_primes(From, To, []):-
From > To,
!.
unsexy_primes(From, To, [From|Rest]):-
unsexy_prime(From),
!,
Next is From + 2,
unsexy_primes(Next, To, Rest).
unsexy_primes(From, To, Rest):-
Next is From + 2,
unsexy_primes(Next, To, Rest).
 
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),
unsexy_primes(Limit, 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).</lang>
 
Module for finding prime numbers up to some limit:
<lang prolog>:- 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 + P,
cross_out(Q, N, P).
cross_out(S, N, P):-
Q is S + P,
cross_out(Q, N, P).</lang>
 
{{out}}
<pre>
Number of groups of size 2 is 16386
Last 5 groups of size 2: [[999371,999377],[999431,999437],[999721,999727],[999763,999769],[999953,999959]]
 
Number of groups of size 3 is 2900
Last 5 groups of size 3: [[997427,997433,997439],[997541,997547,997553],[998071,998077,998083],[998617,998623,998629],[998737,998743,998749]]
 
Number of groups of size 4 is 325
Last 5 groups of size 4: [[977351,977357,977363,977369],[983771,983777,983783,983789],[986131,986137,986143,986149],[990371,990377,990383,990389],[997091,997097,997103,997109]]
 
Number of groups of size 5 is 1
Last 1 groups of size 5: [[5,11,17,23,29]]
 
Number of unsexy primes is 48627
Last 10 unsexy primes: [999853,999863,999883,999907,999917,999931,999961,999979,999983,1000003]
</pre>
 
1,777

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.