Radical of an integer: Difference between revisions
Content added Content deleted
Walterpachl (talk | contribs) (add Rexx) |
SqrtNegInf (talk | contribs) (Added Perl) |
||
Line 1,644: | Line 1,644: | ||
Real time: 15.218 s User time: 15.068 s Sys. time: 0.033 s CPU share: 99.23 % |
Real time: 15.218 s User time: 15.068 s Sys. time: 0.033 s CPU share: 99.23 % |
||
</pre> |
|||
=={{header|Perl}}== |
|||
{{libheader|ntheory}} |
|||
<syntaxhighlight lang="perl" line> |
|||
use strict; |
|||
use warnings; |
|||
use feature <say signatures>; |
|||
no warnings 'experimental::signatures'; |
|||
use List::Util 'uniq'; |
|||
use ntheory <primes vecprod factor>; |
|||
sub comma { reverse ((reverse shift) =~ s/.{3}\K/,/gr) =~ s/^,//r } |
|||
sub table (@V) { ( sprintf( ('%3d')x@V, @V) ) =~ s/.{1,30}\K/\n/gr } |
|||
sub radical ($n) { vecprod uniq factor $n } |
|||
my $limit = 1e6; |
|||
my $primes = primes(1,$limit); |
|||
my %rad; |
|||
$rad{1} = 1; |
|||
$rad{ uniq factor $_ }++ for 2..$limit; |
|||
my $powers; |
|||
my $upto = int sqrt $limit; |
|||
for my $p ( grep { $_< $upto} @$primes ) { |
|||
for (2..$upto) { ($p ** $_) < $limit ? ++$powers : last } |
|||
} |
|||
say 'First fifty radicals:'; |
|||
say table map { radical $_ } 1..50; |
|||
printf "Radical for %7s => %7s\n", comma($_), comma radical($_) for 99999, 499999, 999999; |
|||
printf "\nRadical factor count breakdown, 1 through %s:\n", comma $limit; |
|||
say "$_ => " . comma $rad{$_} for sort keys %rad; |
|||
say <<~"END"; |
|||
Up to @{[comma $limit]}: |
|||
Primes: @{[comma 0+@$primes]} |
|||
Powers: $powers |
|||
Plus 1: 1 |
|||
Total: @{[comma 1 + $powers + @$primes]} |
|||
END |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
First fifty radicals: |
|||
1 2 3 2 5 6 7 2 3 10 |
|||
11 6 13 14 15 2 17 6 19 10 |
|||
21 22 23 6 5 26 3 14 29 30 |
|||
31 2 33 34 35 6 37 38 39 10 |
|||
41 42 43 22 15 46 47 6 7 10 |
|||
Radical for 99,999 => 33,333 |
|||
Radical for 499,999 => 3,937 |
|||
Radical for 999,999 => 111,111 |
|||
Radical factor count breakdown, 1 through 1,000,000: |
|||
1 => 78,735 |
|||
2 => 288,726 |
|||
3 => 379,720 |
|||
4 => 208,034 |
|||
5 => 42,492 |
|||
6 => 2,285 |
|||
7 => 8 |
|||
Up to 1,000,000: |
|||
Primes: 78,498 |
|||
Powers: 236 |
|||
Plus 1: 1 |
|||
Total: 78,735 |
|||
</pre> |
</pre> |
||