Function Get-SumOfMultiples { <# .SYNOPSIS Given a number, find the sum of all the unique multiples of particular numbers up to but not including that number. .DESCRIPTION If we list all the natural numbers below 20 that are multiples of 3 or 5, we get 3, 5, 6, 9, 10, 12, 15, and 18. .PARAMETER Multiples An array of the factors .PARAMETER Limit The value BELOW which we test for .EXAMPLE Get-SumOfMultiples -Multiples @(3, 5) -Limit 10 Returns 23 #> [CmdletBinding()] Param( [int[]]$Multiples, [int]$Limit ) $set = @{} foreach ($Multiple in $Multiples) { if ($Multiple -gt $Limit) { continue } [int] $Maximum = [Math]::Floor($Limit / $Multiple) if ($Multiple * $Maximum -ge $Limit) { $Maximum -= 1 } 1..$Maximum | % { $set[$_ * $Multiple] = $true } } return ($set.Keys | Measure-Object -Sum).Sum }