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

*Author: Philip Potter*

Hint: The problem is similar to problem P13.

# 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-rhebus.pl

use v6; sub prime_factors_mult (Int $n) { my $residue = $n; my @values = (2,3,*+2 ... * > $n); gather for @values -> $k { my $mult=0; while $residue %% $k { $mult++; $residue div= $k; } take $k => $mult if $mult; last if $residue == 1; # This if block is an optimisation which reduces number of iterations # for numbers with large prime factors (such as large primes) # It can be removed without affecting correctness. if $k > sqrt $residue { take $residue => 1; last; } } } say prime_factors_mult($_).list.perl for 1..20; prime_factors_mult(315).list.perl.say; prime_factors_mult(1723).list.perl.say;