1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-08 06:32:28 +08:00

doc: add document for GCD and LCM function

This commit is contained in:
dudaodong
2023-05-06 11:28:38 +08:00
parent 654ba15aaf
commit e2aeb8ec07
5 changed files with 210 additions and 8 deletions

View File

@@ -287,8 +287,8 @@ func gcd[T constraints.Integer](a, b T) T {
func LCM[T constraints.Integer](integers ...T) T {
result := integers[0]
for i := 1; i < len(integers)-1; i++ {
result = lcm(result, integers[i])
for k := range integers {
result = lcm(integers[k], result)
}
return result
@@ -296,5 +296,8 @@ func LCM[T constraints.Integer](integers ...T) T {
// find Least Common Multiple (LCM) via GCD.
func lcm[T constraints.Integer](a, b T) T {
if a == 0 || b == 0 {
panic("lcm function: provide non zero integers only.")
}
return a * b / gcd(a, b)
}

View File

@@ -281,3 +281,39 @@ func ExampleIsPrime() {
// false
// true
}
func ExampleGCD() {
result1 := GCD(1, 1)
result2 := GCD(1, -1)
result3 := GCD(-1, 1)
result4 := GCD(-1, -1)
result5 := GCD(3, 6, 9)
fmt.Println(result1)
fmt.Println(result2)
fmt.Println(result3)
fmt.Println(result4)
fmt.Println(result5)
// Output:
// 1
// 1
// -1
// -1
// 3
}
func ExampleLCM() {
result1 := LCM(1, 1)
result2 := LCM(1, 2)
result3 := LCM(3, 6, 9)
fmt.Println(result1)
fmt.Println(result2)
fmt.Println(result3)
// Output:
// 1
// 2
// 18
}

View File

@@ -239,12 +239,12 @@ func TestGCD(t *testing.T) {
func TestLCM(t *testing.T) {
assert := internal.NewAssert(t, "TestLCM")
assert.Equal(0, LCM(0))
assert.Equal(1, LCM(1))
assert.Equal(-1, LCM(-1))
assert.Equal(0, LCM(0, -1))
assert.Equal(0, LCM(0, 1))
assert.Equal(-1, LCM(1, -1))
assert.Equal(1, LCM(-1, 1))
assert.Equal(1, LCM(1, 1))
assert.Equal(1, LCM(1, 2))
assert.Equal(6, LCM(3, 6, 9))
assert.Equal(-1, LCM(-1, -1))
assert.Equal(2, LCM(1, 2))
assert.Equal(18, LCM(3, 6, 9))
}