added support for openArray's for gcd and lcm (#12621)

This commit is contained in:
Yanis Zafirópulos
2019-11-07 18:06:48 +01:00
committed by Miran
parent a2d6691af2
commit 76085e8a45

View File

@@ -1062,6 +1062,19 @@ proc gcd*(x, y: SomeInteger): SomeInteger =
x -= y
y shl shift
proc gcd*[T](x: openArray[T]): T {.since: (1, 1).} =
## Computes the greatest common (positive) divisor of the elements of ``x``.
##
## See also:
## * `gcd proc <#gcd,T,T>`_ for integer version
runnableExamples:
doAssert gcd(@[13.5, 9.0]) == 4.5
result = x[0]
var i = 1
while i < x.len:
result = gcd(result, x[i])
inc(i)
proc lcm*[T](x, y: T): T =
## Computes the least common multiple of ``x`` and ``y``.
##
@@ -1072,7 +1085,18 @@ proc lcm*[T](x, y: T): T =
doAssert lcm(13, 39) == 39
x div gcd(x, y) * y
proc lcm*[T](x: openArray[T]): T {.since: (1, 1).} =
## Computes the least common multiple of the elements of ``x``.
##
## See also:
## * `gcd proc <#gcd,T,T>`_ for integer version
runnableExamples:
doAssert lcm(@[24, 30]) == 120
result = x[0]
var i = 1
while i < x.len:
result = lcm(result, x[i])
inc(i)
when isMainModule and not defined(JS) and not windowsCC89:
# Check for no side effect annotation