From 0dda125086968453130299deda173151b91da413 Mon Sep 17 00:00:00 2001 From: Stephen Lynn Date: Wed, 8 Jun 2022 20:03:50 +0800 Subject: improved solution to ch-1 and added solution to ch-2 --- challenge-168/steve-g-lynn/julia/ch-1.jl | 29 +++++++++++++++ challenge-168/steve-g-lynn/perl/ch-1.pl | 48 +++---------------------- challenge-168/steve-g-lynn/perl/ch-2.pl | 37 +++++++++++++++++++ challenge-168/steve-g-lynn/raku/ch-1.p6 | 37 +++---------------- challenge-168/steve-g-lynn/raku/ch-2.p6 | 61 ++++++++++++++++++++++++++++++++ 5 files changed, 136 insertions(+), 76 deletions(-) create mode 100755 challenge-168/steve-g-lynn/julia/ch-1.jl create mode 100755 challenge-168/steve-g-lynn/perl/ch-2.pl create mode 100755 challenge-168/steve-g-lynn/raku/ch-2.p6 (limited to 'challenge-168') diff --git a/challenge-168/steve-g-lynn/julia/ch-1.jl b/challenge-168/steve-g-lynn/julia/ch-1.jl new file mode 100755 index 0000000000..e58d43e005 --- /dev/null +++ b/challenge-168/steve-g-lynn/julia/ch-1.jl @@ -0,0 +1,29 @@ +#!/usr/bin/julia +#-- slower than perl or raku for this task because of slow startup + +using Primes + +function perrin(n::Int64) + return ( ([0 1 0; 0 0 1; 1 1 0]^n)*[3;0;2] )[1]; +end + +savedprimes=Array{Int64}(undef,13) +savedprimes[1]=2; savedprimes[2]=3;savedprimes[3]=5;savedprimes[4]=7 +ctr=3; + +for n in (6:1000) + perrinval=perrin(n) + if (isprime(perrinval) && (ctr <=13)) + savedprimes[ctr]=perrinval + global ctr=ctr+1 + end +end + +print("(") +for n in (1:13) + print(savedprimes[n]) + print(" ") +end +print(")\n") + + diff --git a/challenge-168/steve-g-lynn/perl/ch-1.pl b/challenge-168/steve-g-lynn/perl/ch-1.pl index a8729418aa..35818da7f9 100755 --- a/challenge-168/steve-g-lynn/perl/ch-1.pl +++ b/challenge-168/steve-g-lynn/perl/ch-1.pl @@ -3,8 +3,11 @@ use Math::Prime::XS qw(is_prime); local %saveprimes=(); -for (0..150) { - local $chk=&perrin($_); +local @perrin=(3,0,2); +for (1..150) { + local $chk=$perrin[0]; + push @perrin, $perrin[0]+$perrin[1]; + shift @perrin; (is_prime($chk)) && ($saveprimes{$chk}=1); @saveprimes==26 && last; } @@ -15,45 +18,4 @@ foreach (sort{$a<=>$b} keys %saveprimes){ } print ")\n"; -#-- subs - -sub perrin { - local ($n)=@_; - - if ($n==0) { return 3 } - else { return &postmult_302(&matpow($n)) } -} - -#-- subs for fast computation of perrin number using matrix formula -#-- see wikipedia https://en.wikipedia.org/wiki/Perrin_number - -#-- [0 1 0; 0 0 1; 1 1 0]^n (only need 1st row) -sub matpow { - local ($n)=@_; - - if ($n==1) { return (0,1,0) } - else {return &postmult_010_001_110(&matpow($n-1))} -} - - -# 3x3 matrix * [0 1 0; 0 0 1; 1 1 0] (retain 1st row of product) -sub postmult_010_001_110 { - # [a11 a12 a13; a21 a22 a23; a31 a32 a33]*[0 1 0; 0 0 1; 1 1 0] - local ($a11,$a12,$a13)=@_; #just need 1st row - - local $b11=$a13; - local $b12=$a11+$a13; - local $b13=$a12; - - return ($b11,$b12,$b13) #-- return just 1st row -} - -# 3x3 matrix * [3;0;2] retain 1st element of product -sub postmult_302 { - local ($a11,$a12,$a13)=@_; #-- just need 1st row - # [a11 a12 a13; a21 a22 a23; a31 a32 a33]*[3;0;2] - # - return $a11*3+$a13*2; #-- 1st element - -} diff --git a/challenge-168/steve-g-lynn/perl/ch-2.pl b/challenge-168/steve-g-lynn/perl/ch-2.pl new file mode 100755 index 0000000000..d1f6f0aced --- /dev/null +++ b/challenge-168/steve-g-lynn/perl/ch-2.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl + +use Math::Prime::XS qw(is_prime sieve_primes); + + +print &home_prime(16),"\n"; +#-- should be 31636373 [wikipedia example] + +sub home_prime { + local ($n)=@_; + while (1){ + $n=&factors($n); + (is_prime($n)) && last; + } + return $n; +} + + +sub factors { + #--return concatenated prime factors of a number n + local ($n)=@_; + local @primes=sieve_primes($n); + local $retstring=""; + + if (is_prime($n)){ + return $n; + } + else { + foreach $prime (sort{$a<=>$b} @primes){ + while ( ($n % $prime) == 0){ + $n /= $prime; + $retstring .= $prime; + } + } + } + return $retstring; +} diff --git a/challenge-168/steve-g-lynn/raku/ch-1.p6 b/challenge-168/steve-g-lynn/raku/ch-1.p6 index ace5c647e1..9610889cf2 100755 --- a/challenge-168/steve-g-lynn/raku/ch-1.p6 +++ b/challenge-168/steve-g-lynn/raku/ch-1.p6 @@ -1,8 +1,11 @@ #!/usr/bin/raku my %saveprimes=(); +my ($p1,$p2,$p3)=(3,0,2); for ^Inf { - my $chk=perrin($_); + my $chk=$p1; + my $p4=$p1+$p2; + $p1=$p2; $p2=$p3;$p3=$p4; (is-prime($chk)) && (%saveprimes{$chk}=1); %saveprimes.elems==13 && last; } @@ -10,36 +13,4 @@ for ^Inf { say %saveprimes.keys.sort({.Int}); -#-- subs -multi sub perrin(0) {3} -multi sub perrin(Int $n where ($n>0)){postmult_302(matpow($n))} - -#-- subs for fast computation of perrin number using matrix formula -#-- see wikipedia https://en.wikipedia.org/wiki/Perrin_number - -#[0 1 0; 0 0 1; 1 1 0]^n (retain 1st row) -multi sub matpow(1){ (0,1,0) } -multi sub matpow(Int $n where ($n>1)) { postmult_010_001_110 (matpow($n-1)) } - -# 3x3 matrix * [0 1 0; 0 0 1; 1 1 0] (retain 1st row of product) -sub postmult_010_001_110 (*@inmatrix){ - # [a11 a12 a13; a21 a22 a23; a31 a32 a33]*[0 1 0; 0 0 1; 1 1 0] - my ($a11,$a12,$a13)=@inmatrix; #just need 1st row - - my $b11=$a13; - my $b12=$a11+$a13; - my $b13=$a12; - - return ($b11,$b12,$b13) #-- return just 1st row -} - -# 3x3 matrix * [3;0;2] retain 1st element of product -sub postmult_302 (*@inmatrix){ - my ($a11,$a12,$a13)=@inmatrix; #-- just need 1st row - # [a11 a12 a13; a21 a22 a23; a31 a32 a33]*[3;0;2] - # - my $b1=$a11*3+$a13*2; #-- 1st element - - return $b1; -} diff --git a/challenge-168/steve-g-lynn/raku/ch-2.p6 b/challenge-168/steve-g-lynn/raku/ch-2.p6 new file mode 100755 index 0000000000..71fa044657 --- /dev/null +++ b/challenge-168/steve-g-lynn/raku/ch-2.p6 @@ -0,0 +1,61 @@ +#!/usr/bin/raku + +say homeprime(16); +# 31636373 +#-- works but very slow: time real 0m59.301s user 0m58.334s sys 0m0.773s +#-- on MacBook Air running Linux FC36 + +#-- sub for home prime + +sub homeprime(Int $n){ + my $ncopy=$n; + while (1) { + $ncopy=factor($ncopy).Int; + ($ncopy.is-prime) && last; + } + return $ncopy; +} + +#--sub for factorizing + +multi sub factor (1) {1} + +multi sub factor (Int $n where $n > 1){ +#-- returns string concatenation of prime factors + my @primes=prime_sieve($n); + my $retstring=""; + my $ncopy=$n; + + ($n.is-prime) && (return $n); + + for @primes -> $prime { + while ( ($ncopy % $prime)==0) { + $ncopy /= $prime; + $retstring ~= $prime; + } + } + return $retstring; +} + +#--sub for sieve of Eratosthenes +#-- (algorihm from wikipedia) +sub prime_sieve(Int $n where $n > 1){ + my @a = 2..$n; + my (%retval=(),@retval=()); + for (@a) -> $i { + %retval{$i}=1; + } + my @i= 2..round(sqrt($n)); + for @i -> $i { + loop ( my $j=($i*$i); $j <= $n; $j += $i){ + %retval{$j}=0; + } + } + my @k = %retval.keys; + for @k -> $k { + if (%retval{$k}==1) { + push @retval, $k; + } + } + return (@retval.sort:{$^a <=> $^b}); +} -- cgit From e4536342eb74eb731807602c65588d0895ef9505 Mon Sep 17 00:00:00 2001 From: Julien Fiegehenn Date: Wed, 8 Jun 2022 22:33:00 +0100 Subject: challenge 168, in Perl Written with Github Copilot --- challenge-168/julien-fiegehenn/perl/ch-1.pl | 48 ++++++++++++++++++ challenge-168/julien-fiegehenn/perl/ch-2.pl | 78 +++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 challenge-168/julien-fiegehenn/perl/ch-1.pl create mode 100644 challenge-168/julien-fiegehenn/perl/ch-2.pl (limited to 'challenge-168') diff --git a/challenge-168/julien-fiegehenn/perl/ch-1.pl b/challenge-168/julien-fiegehenn/perl/ch-1.pl new file mode 100644 index 0000000000..2e331a2415 --- /dev/null +++ b/challenge-168/julien-fiegehenn/perl/ch-1.pl @@ -0,0 +1,48 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature 'say'; + +# Task 1: Perrin Prime +# Submitted by: Roger Bell_West +# The Perrin sequence is defined to start with [3, 0, 2]; after that, term N is the sum of terms N-2 and N-3. (So it continues 3, 2, 5, 5, 7, ….) + +# A Perrin prime is a number in the Perrin sequence which is also a prime number. + +# Calculate the first 13 Perrin Primes. + +# f(13) = [2, 3, 5, 7, 17, 29, 277, 367, 853, 14197, 43721, 1442968193, 792606555396977] + +sub is_prime { + my $n = shift; + return 0 if $n < 2; + return 1 if $n == 2; + return 0 if $n % 2 == 0; + for (my $i = 3; $i <= sqrt($n); $i += 2) { + return 0 if $n % $i == 0; + } + return 1; +} + +sub perrin_primes { + my $n = shift; + my %primes = map { $_ => 1 } 2, 3; + my @perrin = (3, 0, 2); + my $i = 3; + while (keys %primes < $n) { + $perrin[$i] = $perrin[$i - 2] + $perrin[$i - 3]; + if (is_prime($perrin[$i])) { + $primes{$perrin[$i]} = 1; + } + $i++; + } + return sort { $a <=> $b } keys %primes; +} + +my @primes = perrin_primes(13); +say "@primes"; + +__END__ +use Test::More; +is_deeply \@primes, [2, 3, 5, 7, 17, 29, 277, 367, 853, 14197, 43721, 1442968193, 792606555396977]; +done_testing; \ No newline at end of file diff --git a/challenge-168/julien-fiegehenn/perl/ch-2.pl b/challenge-168/julien-fiegehenn/perl/ch-2.pl new file mode 100644 index 0000000000..9e9812d039 --- /dev/null +++ b/challenge-168/julien-fiegehenn/perl/ch-2.pl @@ -0,0 +1,78 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature 'say'; + +# Task 2: Home Prime +# Submitted by: Mohammad S Anwar +# You are given an integer greater than 1. + +# Write a script to find the home prime of the given number. + +# In number theory, the home prime HP(n) of an integer n greater than 1 is the prime number obtained by repeatedly factoring the increasing concatenation of prime factors including repetitions. + +# Further information can be found on Wikipedia and OEIS. + +# Example +# As given in the Wikipedia page, + +# HP(10) = 773, as 10 factors as 2×5 yielding HP10(1) = 25, 25 factors as 5×5 yielding HP10(2) = HP25(1) = 55, 55 = 5×11 implies HP10(3) = HP25(2) = HP55(1) = 511, and 511 = 7×73 gives HP10(4) = HP25(3) = HP55(2) = HP511(1) = 773, a prime number. + +# written with github copilot + +# calculate the prime factors of a number +sub prime_factors { + my $n = shift; + my @factors = (); + my $i = 2; + while ($n > 1) { + while ($n % $i == 0) { + push @factors, $i; + $n /= $i; + } + $i++; + } + return @factors; +} + +sub is_prime { + my $n = shift; + return 0 if $n < 2; + return 1 if $n == 2; + return 0 if $n % 2 == 0; + for (my $i = 3; $i <= sqrt($n); $i += 2) { + return 0 if $n % $i == 0; + } + return 1; +} + +# calculate the home prime of a number +# In number theory, the home prime HP(n) of an integer n greater than 1 is the prime number obtained by repeatedly factoring the increasing concatenation of prime factors including repetitions. +sub home_prime { + my $n = shift; + + return $n if is_prime($n); + return home_prime(join '', prime_factors($n)); +} + +# a version of home_prime that produces debug output at every step +sub home_prime_debug { + my $n = shift; + + say "n = $n"; + return $n if is_prime($n); + my @factors = prime_factors($n); + say "factors = @factors"; + return home_prime_debug(join '', @factors); +} + +__END__ + +use Test::More; +is_deeply [prime_factors(10)], [2, 5]; +is_deeply [prime_factors(13)], [13]; +is_deeply [prime_factors(14)], [2, 7]; + +is home_prime(10), 773; +is home_prime_debug(10), 773; +done_testing; \ No newline at end of file -- cgit From dc6d3cd6cc5fee7911b59bee164cdf4bf32ee69f Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Thu, 9 Jun 2022 09:15:38 +0100 Subject: Blog post for challenge #168 --- challenge-168/roger-bell-west/blog.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 challenge-168/roger-bell-west/blog.txt (limited to 'challenge-168') diff --git a/challenge-168/roger-bell-west/blog.txt b/challenge-168/roger-bell-west/blog.txt new file mode 100644 index 0000000000..aca56403ca --- /dev/null +++ b/challenge-168/roger-bell-west/blog.txt @@ -0,0 +1 @@ +https://blog.firedrake.org/archive/2022/06/The_Weekly_Challenge_168__At_Home_with_the_Perrins.html -- cgit From dceb0fcbb748fd8444bb8bf0a1589bc672d2d334 Mon Sep 17 00:00:00 2001 From: Stephen Lynn Date: Thu, 9 Jun 2022 19:03:02 +0800 Subject: improved raku version added julia example for ch-2 --- challenge-168/steve-g-lynn/julia/ch-2.jl | 15 +++++++ challenge-168/steve-g-lynn/raku/ch-2.p6 | 69 +++++++++++++++++++++----------- 2 files changed, 61 insertions(+), 23 deletions(-) create mode 100755 challenge-168/steve-g-lynn/julia/ch-2.jl (limited to 'challenge-168') diff --git a/challenge-168/steve-g-lynn/julia/ch-2.jl b/challenge-168/steve-g-lynn/julia/ch-2.jl new file mode 100755 index 0000000000..19d4c7d498 --- /dev/null +++ b/challenge-168/steve-g-lynn/julia/ch-2.jl @@ -0,0 +1,15 @@ +#! /usr/bin/julia + +using Primes + +function homeprime(n::Int64) + ncopy=n + while (!isprime(ncopy)) + ncopy=parse(Int64,join(factor(Vector,ncopy))) + end + return ncopy +end + +println(homeprime(16)) +#31636373 + diff --git a/challenge-168/steve-g-lynn/raku/ch-2.p6 b/challenge-168/steve-g-lynn/raku/ch-2.p6 index 71fa044657..b4183fd6d3 100755 --- a/challenge-168/steve-g-lynn/raku/ch-2.p6 +++ b/challenge-168/steve-g-lynn/raku/ch-2.p6 @@ -2,8 +2,7 @@ say homeprime(16); # 31636373 -#-- works but very slow: time real 0m59.301s user 0m58.334s sys 0m0.773s -#-- on MacBook Air running Linux FC36 +#-- works but slow #-- sub for home prime @@ -22,7 +21,8 @@ multi sub factor (1) {1} multi sub factor (Int $n where $n > 1){ #-- returns string concatenation of prime factors - my @primes=prime_sieve($n); +# my @primes=prime_sieve($n); + my @primes=find_primes($n); my $retstring=""; my $ncopy=$n; @@ -37,25 +37,48 @@ multi sub factor (Int $n where $n > 1){ return $retstring; } -#--sub for sieve of Eratosthenes -#-- (algorihm from wikipedia) -sub prime_sieve(Int $n where $n > 1){ - my @a = 2..$n; - my (%retval=(),@retval=()); - for (@a) -> $i { - %retval{$i}=1; - } - my @i= 2..round(sqrt($n)); - for @i -> $i { - loop ( my $j=($i*$i); $j <= $n; $j += $i){ - %retval{$j}=0; - } - } - my @k = %retval.keys; - for @k -> $k { - if (%retval{$k}==1) { - push @retval, $k; - } +multi sub find_primes(Int $n where $n <= 13) { + my @primes=(2,3,5,7,11,13); + my @retval=(); + for @primes -> $prime { + ($prime < $n) && (push @retval, $prime); } - return (@retval.sort:{$^a <=> $^b}); + return (@retval.sort); } + +multi sub find_primes(Int $n where $n > 13) { +#-- naive approach by trial factorization + my @primes=(3,7,11,13); + + my $i=13; + + while ($i < $n) { + #-- count only odd numbers not ending in 5. Take 4 at a time. + my @testarray=(); + + (($i+4) < $n) && (push @testarray, ($i+4)); + (($i+6) < $n) && (push @testarray, ($i+6)); + (($i+8) < $n) && (push @testarray, ($i+8)); + (($i+10) < $n) && (push @testarray, ($i+10)); + + while (@testarray.elems > 0) { + my $testitem=shift(@testarray); + unless ((($testitem % 6)==1) || (($testitem % 6)==5)) { + #-- use the property that prime numbers above 5 are 6k+1 or 6k-1 + next; + } + for @primes -> $prime { + ($prime > sqrt($testitem)) && last; + (($testitem % $prime)==0) && last; + } + push @primes, $testitem; + } + $i += 10; + } + + splice(@primes,0,1, <2 3 5>); #-- left out 2 and 5 earlier to avoid + # unnecessary redundant factorizing + return (@primes.sort); +} + + -- cgit From 24bce6c7bbb60c50ed3bead06e8a16da9db8eeef Mon Sep 17 00:00:00 2001 From: Humberto Massa Date: Thu, 9 Jun 2022 12:23:22 -0300 Subject: Answer to challenge 168 by Massa, Humberto --- challenge-168/massa/raku/ch-1.raku | 2 ++ challenge-168/massa/raku/ch-2.raku | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 challenge-168/massa/raku/ch-1.raku create mode 100644 challenge-168/massa/raku/ch-2.raku (limited to 'challenge-168') diff --git a/challenge-168/massa/raku/ch-1.raku b/challenge-168/massa/raku/ch-1.raku new file mode 100644 index 0000000000..d8fd9a0b66 --- /dev/null +++ b/challenge-168/massa/raku/ch-1.raku @@ -0,0 +1,2 @@ +use v6; +(3, 0, 2, * + * + 0 * * ... *).grep(*.is-prime)[^20].sort.unique[^13].say diff --git a/challenge-168/massa/raku/ch-2.raku b/challenge-168/massa/raku/ch-2.raku new file mode 100644 index 0000000000..535eaa16fa --- /dev/null +++ b/challenge-168/massa/raku/ch-2.raku @@ -0,0 +1,28 @@ +use v6; + +my sub factors(int \x is copy) { + my int $possible-factor = 2; + gather { + while x > 1 { + if $possible-factor.is-prime && x %% $possible-factor { + take $possible-factor; + x div= $possible-factor + } else { + Nil until is-prime ++$possible-factor + } + } + } +} + +my sub hp(int \x is copy) { + loop { + given +[~] factors x { + .return if .is-prime; + x = $_ + } + } +} + +sub MAIN(Int() \n where * > 1) { + say hp n +} -- cgit From 26d2ce2e72a752e3e622f9e0717c6b95fe205115 Mon Sep 17 00:00:00 2001 From: Humberto Massa Date: Thu, 9 Jun 2022 13:10:04 -0300 Subject: `head()` was the answer... :-) --- challenge-168/massa/raku/ch-1.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'challenge-168') diff --git a/challenge-168/massa/raku/ch-1.raku b/challenge-168/massa/raku/ch-1.raku index d8fd9a0b66..2fbde00b8c 100644 --- a/challenge-168/massa/raku/ch-1.raku +++ b/challenge-168/massa/raku/ch-1.raku @@ -1,2 +1,2 @@ use v6; -(3, 0, 2, * + * + 0 * * ... *).grep(*.is-prime)[^20].sort.unique[^13].say +(3, 0, 2, * + * + 0 * * ... *).grep(*.is-prime).unique.head(13).sort.say -- cgit From 0e1f5b17707b5151487904b00ea69b3ba3b1e961 Mon Sep 17 00:00:00 2001 From: Lubos Kolouch Date: Thu, 9 Jun 2022 21:15:40 +0200 Subject: feat(challenge-168/lubos-kolouch/p[erl,ython]/ch-1.p[ly]): Challenge 168 Task 1 LK Perl Python --- challenge-168/lubos-kolouch/perl/ch-1.pl | 33 +++++++++++++++++++++++++ challenge-168/lubos-kolouch/python/ch-1.py | 39 ++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 challenge-168/lubos-kolouch/perl/ch-1.pl create mode 100644 challenge-168/lubos-kolouch/python/ch-1.py (limited to 'challenge-168') diff --git a/challenge-168/lubos-kolouch/perl/ch-1.pl b/challenge-168/lubos-kolouch/perl/ch-1.pl new file mode 100644 index 0000000000..956d2822e4 --- /dev/null +++ b/challenge-168/lubos-kolouch/perl/ch-1.pl @@ -0,0 +1,33 @@ +package main; +use strict; +use warnings; +use Math::Prime::Util qw(is_prime); + +sub generate_perrin_sequence { + my $n = shift; + my @perrin_sequence = ( 3, 0, 2 ); + + my %perrin_primes; + + while ( scalar keys %perrin_primes < $n ) { + my $next_number = $perrin_sequence[-3] + $perrin_sequence[-2]; + push @perrin_sequence, $next_number; + $perrin_primes{$next_number} = 1 if is_prime($next_number); + } + + my @primes = sort { $a <=> $b } keys %perrin_primes; + + return \@primes; +} + +use Test::More; + +is_deeply( + generate_perrin_sequence(13), + [ 2, 3, 5, 7, 17, 29, 277, 367, 853, 14197, 43721, 1442968193, + 792606555396977 + ] +); + +done_testing; +1; diff --git a/challenge-168/lubos-kolouch/python/ch-1.py b/challenge-168/lubos-kolouch/python/ch-1.py new file mode 100644 index 0000000000..8c8790c5dc --- /dev/null +++ b/challenge-168/lubos-kolouch/python/ch-1.py @@ -0,0 +1,39 @@ +""" Challenge 168 Task 1 LK Python """ + +from sympy import isprime + + +def generate_perrin_primes(n: int) -> list: + """ + Generate all primes up to n using the Perrin sequence. + """ + perrin_sequence = [3, 0, 2] + + perrin_primes: dict = {} + + while len(perrin_primes.keys()) < n: + + next_number = perrin_sequence[-3] + perrin_sequence[-2] + perrin_sequence.append(next_number) + + if isprime(next_number): + perrin_primes[next_number] = True + + return sorted(perrin_primes.keys()) + + +assert generate_perrin_primes(13) == [ + 2, + 3, + 5, + 7, + 17, + 29, + 277, + 367, + 853, + 14197, + 43721, + 1442968193, + 792606555396977, +] -- cgit