Special factorials: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: added syntax colouring the hard way) |
SqrtNegInf (talk | contribs) (Added Perl) |
||
Line 434: | Line 434: | ||
119 nothing |
119 nothing |
||
</pre> |
</pre> |
||
=={{header|Perl}}== |
|||
{{libheader|ntheory}} |
|||
<lang perl>use strict; |
|||
use warnings; |
|||
use feature qw<signatures say>; |
|||
no warnings qw<experimental::signatures>; |
|||
use bigint try => 'GMP'; |
|||
use ntheory qw<vecprod vecsum vecreduce vecfirstidx>; |
|||
sub f ($n) { vecreduce { $a * $b } 1, 1..$n } |
|||
sub sf ($n) { vecprod map { f($_) } 1..$n } |
|||
sub H ($n) { vecprod map { $_ ** $_ } 1..$n } |
|||
sub af ($n) { vecsum map { (-1) ** ($n-$_) * f($_) } 1..$n } |
|||
sub ef ($n) { vecreduce { $b ** $a } 1..$n } |
|||
sub rf ($n) { |
|||
my $v = vecfirstidx { f($_) >= $n } 0..1E6; |
|||
$n == f($v) ? $v : 'Nope' |
|||
} |
|||
say 'sf : ' . join ' ', map { sf $_ } 0..9; |
|||
say 'H : ' . join ' ', map { H $_ } 0..9; |
|||
say 'af : ' . join ' ', map { af $_ } 0..9; |
|||
say 'ef : ' . join ' ', map { ef $_ } 1..4; |
|||
say '5$ has ' . length(5**4**3**2) . ' digits'; |
|||
say 'rf : ' . join ' ', map { rf $_ } <1 2 6 24 120 720 5040 40320 362880 3628800>; |
|||
say 'rf(119) = ' . rf(119);</lang> |
|||
{{out}} |
|||
<pre>sf : 1 1 2 12 288 34560 24883200 125411328000 5056584744960000 1834933472251084800000 |
|||
H : 1 1 4 108 27648 86400000 4031078400000 3319766398771200000 55696437941726556979200000 21577941222941856209168026828800000 |
|||
af : 0 1 1 5 19 101 619 4421 35899 326981 |
|||
ef : 1 2 9 262144 |
|||
5$ has 183231 digits |
|||
rf : 0 2 3 4 5 6 7 8 9 10 |
|||
rf(119) = Nope</pre> |
|||
=={{header|Phix}}== |
=={{header|Phix}}== |