##
n!/k! = PI(x) where x goes from (k+1) to (n) assuming n > k; PI(x) stands for product of
##
##
#!/usr/bin/perl
use strict;
use warnings;
# Numerator and Denominator specified as factorials [BrowserUk]'s example numbers
my @snum = (44_289, 11_800, 10_389, 4570);
my @sden = (56_089, 989, 9_400, 43_300, 2_400);
# old list from previous node
# my @snum = (44_289, 11_800, 10_389, 45_700);
# my @sden = (56_089, 989, 9_400, 43_300, 11_800, 2_400);
#
@snum = sort {$b<=>$a} @snum;
@sden = sort {$b<=>$a} @sden;
my $i = 0;
# Make the arrays equal size
if (@snum < @sden) {
foreach $i (@snum..$#sden) { $snum[$i] = 0;}
} else {
foreach $i (@sden..$#snum) { $sden[$i] = 0;}
}
print +($_,$/) for (@snum);
print $/;
print +($_,$/) for (@sden);
print $/;
my @nexp = ();
my @dexp = ();
# n!/k! = (k+1)..(n) [assuming n > k]
for $i (0..$#snum) {
if ($snum[$i] > $sden[$i]) {
print ("Numerator: Going to push from ", $sden[$i]+1, " to ", $snum[$i],$/);
push (@nexp, (($sden[$i]+1)..$snum[$i]));
} elsif ($sden[$i] > $snum[$i]) {
print ("Denominator: Going to push from ", $snum[$i]+1, " to ", $sden[$i],$/);
push (@dexp, (($snum[$i]+1)..$sden[$i]));
}
}
print ("Length of expanded numerator = ", scalar @nexp, $/);
print ("Length of expanded denominator = ", scalar @dexp, $/);
print ("Total Number of elements = ", scalar @nexp + scalar @dexp, $/);
##
##
__END__
Denominator: Going to push from 44290 to 56089
Denominator: Going to push from 11801 to 43300
Numerator: Going to push from 9401 to 10389
Numerator: Going to push from 2401 to 4570
Denominator: Going to push from 1 to 989
Length of expanded numerator = 3159
Length of expanded denominator = 44289
Total Number of elements = 47448