Erdös-Selfridge categorization of primes: Difference between revisions

Content added Content deleted
(→‎{{header|Raku}}: Add a Raku example)
m (→‎{{header|Raku}}: minor style tweaks)
Line 52: Line 52:


sub Erdös-Selfridge ($n) {
sub Erdös-Selfridge ($n) {
my @factors = prime-factors($n + 1).unique.grep(* > 3);
my @factors = prime-factors($n + 1).unique.grep: * > 3;
my $category = 1;
my $category = 1;
while @factors.elems {
while @factors.elems {
Line 60: Line 60:
$category
$category
}
}



use Math::Primesieve;
use Math::Primesieve;

my $sieve = Math::Primesieve.new;
my $sieve = Math::Primesieve.new;


say "First 200 primes; Erdös-Selfridge categorized:";
my %category;
my %category;
$sieve.n-primes(200).map: { %category{ Erdös-Selfridge $_ }.push: $_ }
$sieve.n-primes(200).map: { %category{ Erdös-Selfridge $_ }.push: $_ }

say "First 200 primes; Erdös-Selfridge categorized:";
.say for sort %category;
.say for sort %category;



say "\nFirst million primes; Erdös-Selfridge categorized:";
say "\nFirst million primes; Erdös-Selfridge categorized:";
my @category;
my @category;
$sieve.n-primes(1_000_000).map: { @category[ Erdös-Selfridge $_ ].push: $_ }
$sieve.n-primes(1_000_000).map: { @category[ Erdös-Selfridge $_ ].push: $_ }
printf "Category %2d: first: %7d, last: %8d, total: %d\n", ++$, .[0], .[*-1], .elems for @category.grep: *.elems;</lang>

for @category {
next unless $_;
printf "Category %2d: first: %7d, last: %8d, total: %d\n", ++$, .[0], .[*-1], .elems;
}</lang>
{{out}}
{{out}}
<pre>First 200 primes; Erdös-Selfridge categorized:
<pre>First 200 primes; Erdös-Selfridge categorized: