24 lines
801 B
Perl
24 lines
801 B
Perl
use v5.36;
|
|
use ntheory qw(is_square is_semiprime factor vecall);
|
|
|
|
sub comma { reverse((reverse shift) =~ s/.{3}\K/,/gr) =~ s/^,//r }
|
|
sub table ($c, @V) { my $t = $c * (my $w = 5); (sprintf(('%' . $w . 'd') x @V, @V)) =~ s/.{1,$t}\K/\n/gr }
|
|
|
|
sub is_blum ($n) {
|
|
($n % 4) == 1 && is_semiprime($n) && !is_square($n) && vecall { ($_ % 4) == 3 } factor($n);
|
|
}
|
|
|
|
my @nth = (26828, 1e5, 2e5, 3e5, 4e5);
|
|
|
|
my (@blum, %C);
|
|
for (my $i = 1 ; ; ++$i) {
|
|
push @blum, $i if is_blum $i;
|
|
last if $nth[-1] == @blum;
|
|
}
|
|
$C{$_ % 10}++ for @blum;
|
|
|
|
say "The first fifty Blum integers:\n" . table 10, @blum[0 .. 49];
|
|
printf "The %7sth Blum integer: %9s\n", comma($_), comma $blum[$_ - 1] for @nth;
|
|
say '';
|
|
printf "$_: %6d (%.3f%%)\n", $C{$_}, 100 * $C{$_} / scalar @blum for <1 3 7 9>;
|