# NAME

Math::Factor::XS - Factorize numbers and calculate matching multiplications

# SYNOPSIS

```
use Math::Factor::XS ':all';
# or
use Math::Factor::XS qw(factors prime_factors matches);
$number = 30107;
@factors = factors($number);
@primes = prime_factors($number);
@matches = matches($number, \@factors);
print "$factors[1]\n";
print "$number == $matches[0][0] * $matches[0][1]\n";
```

# DESCRIPTION

`Math::Factor::XS`

factorizes numbers by applying trial divisions.

# FUNCTIONS

## factors

Find all factors (ie. divisors) of a number.

`@factors = factors($number);`

The number is factorized and its factors are returned as a list. For example,

```
@factors = factors(30);
# @factors = (2, 3, 5, 6, 10, 15);
```

## prime_factors

Find prime factors of a number.

`@factors = prime_factors($number);`

The number is factorized and its prime factors are returned as a list. Multiplying the list together gives `$number`

. For example,

```
@primes = prime_factors(90);
# @primes = (2, 3, 3, 5);
```

## count_prime_factors

Return the count of prime factors of a number. This is the number of values returned by `prime_factors()`

.

`my $count = count_prime_factors($number);`

## matches

Calculates matching multiplications.

`@matches = matches($number, \@factors, { skip_multiples => [0|1] });`

The factors will be multiplied against each other and all combinations that equal the number itself will be returned as a two-dimensional list. The matches are accessible through the indexes; for example, the first two numbers that matched the number may be accessed by `$matches[0][0]`

and `$matches[0][1]`

, the second pair by `$matches[1][0]`

and `$matches[1][1]`

, and so on.

The hashref provided at the end is optional. If `skip_multiples`

is set to a true value, then matching multiplications that contain multiplicated small factors will be discarded. Example:

```
11 * 2737 == 30107 # accepted
77 * 391 == 30107 # discarded
```

Direct use of `$Math::Factor::XS::Skip_multiple`

does no longer have an effect as it has been superseded by `skip_multiples`

.

# EXPORT

## Functions

`factors()`

, `matches()`

and `prime_factors()`

are exportable.

## Tags

`:all - *()`

# AUTHOR

Steven Schubiger <schubiger@cpan.org>

# LICENSE

This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.