mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-07 12:24:19 +00:00
added support for openArray's for gcd and lcm (#12621)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user