Provides fast algorithms for generating integer partitions.

partitions(n, max = 0, length = 0, perm = FALSE, fill = FALSE, equal = T)

## Arguments

n

positive integer.

max

maximum integer in the partitions.

length

maximum number of elements in the partitions.

perm

logical. Permute partitions?

fill

logical. Fill partitions with zeros to match length?

equal

logical. Return only partition of n? If FALSE, partitions of all integers less or equal to n are returned.

## Value

list of partitions, or matrix if length>0 and fill=TRUE.

## References

Guidotti, E. (2020). "calculus: High dimensional numerical and symbolic calculus in R". https://arxiv.org/abs/2101.00086

## Examples

### partitions of 4
partitions(4)
#> [[1]]
#> [1] 4
#>
#> [[2]]
#> [1] 1 3
#>
#> [[3]]
#> [1] 2 2
#>
#> [[4]]
#> [1] 1 1 2
#>
#> [[5]]
#> [1] 1 1 1 1
#>

### partitions of 4 and permute
partitions(4, perm = TRUE)
#> [[1]]
#> [1] 4
#>
#> [[2]]
#> [1] 1 3
#>
#> [[3]]
#> [1] 3 1
#>
#> [[4]]
#> [1] 2 2
#>
#> [[5]]
#> [1] 1 1 2
#>
#> [[6]]
#> [1] 1 2 1
#>
#> [[7]]
#> [1] 2 1 1
#>
#> [[8]]
#> [1] 1 1 1 1
#>

### partitions of 4 with max element equal to 2
partitions(4, max = 2)
#> [[1]]
#> [1] 2 2
#>
#> [[2]]
#> [1] 1 1 2
#>
#> [[3]]
#> [1] 1 1 1 1
#>

### partitions of 4 with 2 elements
partitions(4, length = 2)
#> [[1]]
#> [1] 1 3
#>
#> [[2]]
#> [1] 2 2
#>

### partitions of 4 with 3 elements, fill with zeros
partitions(4, length = 3, fill = TRUE)
#>      [,1] [,2] [,3] [,4]
#> [1,]    0    0    0    1
#> [2,]    0    1    2    1
#> [3,]    4    3    2    2

### partitions of 4 with 2 elements, fill with zeros and permute
partitions(4, length = 2, fill = TRUE, perm = TRUE)
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    0    4    1    3    2
#> [2,]    4    0    3    1    2

### partitions of all integers less or equal to 3
partitions(3, equal = FALSE)
#> [[1]]
#> [1] 0
#>
#> [[2]]
#> [1] 1
#>
#> [[3]]
#> [1] 2
#>
#> [[4]]
#> [1] 1 1
#>
#> [[5]]
#> [1] 3
#>
#> [[6]]
#> [1] 1 2
#>
#> [[7]]
#> [1] 1 1 1
#>

### partitions of all integers less or equal to 3, fill to 2 elements and permute
partitions(3, equal = FALSE, length = 2, fill = TRUE, perm = TRUE)
#>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,]    0    0    1    0    2    1    0    3    1     2
#> [2,]    0    1    0    2    0    1    3    0    2     1