in reply to Fraction Cancelation
I'd use a hash of primes as keys, powers of those as the values. Decompose each element of each list into primes. For the numerator list, increase the primes power value. For the denominator list, decrease it:
my @a = qw(1 4 6 2 7 87 5 6 4 32); my @b = qw(86 50 62 41 32); my %primes; map { $primes{$_}++ } map { primes($_) } @a; map { $primes{$_}-- } map { primes($_) } @b; sub primes { ... # left as an exercise for the reader }
Then just compute the product of the powers:
$result *= $_ ** $primes{$_} for keys %primes;
And this last line is where the discussion in BrowserUk's early question kicks in, with regards to accuracy, overflow, timing etc. Should we sort the keys? is there a more efficient way to produce the division with partial powers of positive and negative exponents? Is there a way to keep the intermediate results close to zero?
My aim is to multiply integers within a given array and then divide two arrays
This is an XY Problem - for division/factorial you don't have to precompute each term.
|
|---|