mirror of
https://github.com/cubixle/codekata-golang.git
synced 2026-04-30 08:38:43 +01:00
53: combinatoric selections
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func main() {
|
||||
result := 0
|
||||
limit, _ := (&big.Int{}).SetString("1000000", 0)
|
||||
nLimit := 100
|
||||
for i := 1; i <= nLimit; i++ {
|
||||
for j := 0; j <= i; j++ {
|
||||
bi, _ := (&big.Int{}).SetString(strconv.Itoa(i), 0)
|
||||
fi := factorialOf(bi)
|
||||
bj, _ := (&big.Int{}).SetString(strconv.Itoa(j), 0)
|
||||
fj := factorialOf(bj)
|
||||
bk, _ := (&big.Int{}).SetString(strconv.Itoa(i-j), 0)
|
||||
fk := factorialOf(bk)
|
||||
mik := fj.Mul(fj, fk)
|
||||
dvk := mik.Div(fi, mik)
|
||||
if x := dvk.Add(dvk, limit.Neg(limit)); x.Int64() >= 0 {
|
||||
result++
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(result)
|
||||
}
|
||||
|
||||
func factorialOf(n *big.Int) *big.Int {
|
||||
one, _ := (&big.Int{}).SetString("1", 0)
|
||||
if n.Int64() <= 2 {
|
||||
return one
|
||||
}
|
||||
p, _ := (&big.Int{}).SetString("1", 0)
|
||||
i, _ := (&big.Int{}).SetString("2", 0)
|
||||
for {
|
||||
p = p.Mul(p, i)
|
||||
if i.String() == n.String() {
|
||||
break
|
||||
}
|
||||
i = i.Add(i, one)
|
||||
}
|
||||
return p
|
||||
}
|
||||
Reference in New Issue
Block a user