P36 - Determine the prime factors of a given positive integer (2).

Author: Curtis Poe

Hint: The problem is similar to problem P13.

This was originally a blog post: http://blogs.perl.org/users/ovid/2010/08/prime-factors-in-perl-6.html.

Specification

```P36 (**) Determine the prime factors of a given positive integer (2).
Construct a list containing the prime factors and their multiplicity.
```

Example

```> prime_factors_mult(315).perl.say
(3 => 2, 5 => 1, 7 => 1)
```

Source code: P36-ovid.pl

```use v6;

constant PRIMES = grep { .is-prime }, 2 .. *;

sub prime-factors(Int \$number-to-factor where * > 1 --> Hash) {
return { \$number-to-factor => 1 } if \$number-to-factor.is-prime;

my %factors;
my \$number = \$number-to-factor;
for PRIMES.cache -> \$prime {
last if \$prime ** 2 > \$number;
while \$number %% \$prime {
%factors{\$prime}++;
\$number div= \$prime;
}
}
%factors{\$number}++ if \$number != 1;  # we have a prime left over
return %factors;
}

for 2, 17, 53, 90, 94, 200, 289, 62710561 -> \$number {
say "Prime factors of \$number are: {prime-factors(\$number).perl}";
}

```