1 回答
TA贡献1862条经验 获得超6个赞
使用big.NewInt()代替big.Int()。big.Int()只是类型转换。您需要查看包的文档big
您应该主要使用带有形式的方法func (z *T) Binary(x, y *T) *T // z = x op y
要在调用Mul方法之后将需要提供结果变量的 2 个参数相乘。因此,例如,要获得 2*2 的结果,您需要:
big.NewInt(0).Mul(big.NewInt(2), big.NewInt(2))
您可以尝试在 Go playground
您还可以创建扩展功能,例如:
func Mul(x, y *big.Int) *big.Int {
return big.NewInt(0).Mul(x, y)
}
为了使代码更具可读性:
// Fast doubling Fibonacci algorithm
package main
import (
"fmt"
"math/big"
)
// (Public) Returns F(n).
func fibonacci(n int) *big.Int {
if n < 0 {
panic("Negative arguments not implemented")
}
fst, _ := fib(n)
return fst
}
// (Private) Returns the tuple (F(n), F(n+1)).
func fib(n int) (*big.Int, *big.Int) {
if n == 0 {
return big.NewInt(0), big.NewInt(1)
}
a, b := fib(n / 2)
c := Mul(a, Sub(Mul(b, big.NewInt(2)), a))
d := Add(Mul(a, a), Mul(b, b))
if n%2 == 0 {
return c, d
} else {
return d, Add(c, d)
}
}
func main() {
fmt.Println(fibonacci(123))
fmt.Println(fibonacci(124))
}
func Mul(x, y *big.Int) *big.Int {
return big.NewInt(0).Mul(x, y)
}
func Sub(x, y *big.Int) *big.Int {
return big.NewInt(0).Sub(x, y)
}
func Add(x, y *big.Int) *big.Int {
return big.NewInt(0).Add(x, y)
}
- 1 回答
- 0 关注
- 211 浏览
添加回答
举报