# primorial.frink

``` /** This program calculates primorial numbers.  A primorial is the product     of primes.     primorial = 1 (by definition)     primorial = 2     primorial = 6     primorial = 30     This does not do any caching of results. */ primorial[n] := product[first[primes[], n]] /** This is a recursive algorithm that splits the results into an upper and     lower half and multiplies in stages.  This is much faster for large     numbers. */ primorialSplitting[n] := {    if n == 0       return 1    primes = array[first[primes[], n]]    return primorialSplitting[n, 0, n-1, primes] } /** The actual recursive algorithm. */ primorialSplitting[n, begin, end, primes] := {    range = (end-begin)    if range >= 2    {       middle = (begin + end) div 2       return primorialSplitting[n, begin, middle, primes] * primorialSplitting[n, middle+1, end, primes]    }    if range == 1       return primes@begin * primes@end    if range == 0       return primes@begin } /** Rosetta code tests.     https://rosettacode.org/wiki/Primorial_numbers */ for n = 0 to 9    println["primorial[\$n] = " + primorialSplitting[n]] for n = [10, 100, 1000, 10000, 100000, million]    println["Length of primorial \$n is " + length[toString[primorialSplitting[n]]] + " decimal digits."] ```

This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18698 days, 11 hours, 51 minutes ago.