Sexy primes: Difference between revisions
Content added Content deleted
(Added Prolog Solution) |
|||
Line 1,441: | Line 1,441: | ||
325 quadruplets, the last 3 being {{986131,986137,986143,986149},{990371,990377,990383,990389},{997091,997097,997103,997109}} |
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}} |
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> |
</pre> |
||