added support for openArray's for gcd and lcm (#12621)
This commit is contained in:
parent
a2d6691af2
commit
76085e8a45
1 changed files with 25 additions and 1 deletions
|
|
@ -1062,6 +1062,19 @@ proc gcd*(x, y: SomeInteger): SomeInteger =
|
||||||
x -= y
|
x -= y
|
||||||
y shl shift
|
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 =
|
proc lcm*[T](x, y: T): T =
|
||||||
## Computes the least common multiple of ``x`` and ``y``.
|
## 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
|
doAssert lcm(13, 39) == 39
|
||||||
x div gcd(x, y) * y
|
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:
|
when isMainModule and not defined(JS) and not windowsCC89:
|
||||||
# Check for no side effect annotation
|
# Check for no side effect annotation
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue