`AUTHOR`

- Dr. Alistair Ward
`DESCRIPTION`

- Provides implementations of the class
`Algorithm`

. - Provides additional functions related to
*factorials*, but which depends on a specific implementation, and which therefore can't be accessed throught the class-interface. - http://en.wikipedia.org/wiki/Factorial.
- http://mathworld.wolfram.com/Factorial.html.
- http://www.luschny.de/math/factorial/FastFactorialFunctions.htm.

- data Algorithm
- primeFactors :: Integral base => base -> Factors base base
- risingFactorial :: Integral i => i -> i -> i
- fallingFactorial :: Integral i => i -> i -> i
- (!/!) :: (Integral i, Fractional f) => i -> i -> f

# Types

## Data-types

The algorithms by which *factorial* has been implemented.

Bisection | The integers from which the |

PrimeFactorisation | The |

# Functions

:: Integral base | |

=> base | The number, whose |

-> Factors base base | The |

- Returns the
*prime factors*, of the*factorial*of the specifed integer. - Precisely all the primes less than or equal to the specified integer
*n*, are included in*n!*; only the multiplicity of each of these known prime components need be determined. - http://en.wikipedia.org/wiki/Factorial#Number_theory.
- CAVEAT: currently a hotspot.

:: Integral i | |

=> i | The lower bound of the integer-range, whose product is returned. |

-> i | The number of integers in the range above. |

-> i | The result. |

Returns the *rising factorial*; http://mathworld.wolfram.com/RisingFactorial.html

:: Integral i | |

=> i | The upper bound of the integer-range, whose product is returned. |

-> i | The number of integers in the range beneath. |

-> i | The result. |

Returns the *falling factorial*; http://mathworld.wolfram.com/FallingFactorial.html

## Operators

:: (Integral i, Fractional f) | |

=> i | The |

-> i | The |

-> f | The resulting fraction. |

- Returns the ratio of two factorials.
- It is more efficient than evaluating both factorials, and then dividing.
- For more complex combinations of factorials, such as in the
*Binomial coefficient*, extract the*prime factors*using`primeFactors`

then manipulate them using the module Data.PrimeFactors, and evaluate it using by*Data.PrimeFactors.product'*.