golang-使用数学大包的模数

sat*_*sat 4 go

阅读文档-http://golang.org/pkg/math/big/

Mod将y!= 0的z设置为模数x%y并返回z 如果y == 0,则会发生除以零的运行时恐慌。Mod实现欧几里德模量(与Go不同);有关更多详细信息,请参见DivMod。

10%4 = 2,但与此同时我得到8(使用math / big包执行相同的操作)-http://play.golang.org/p/_86etDvLYq

package main

import "fmt"
import "math/big"
import "strconv"

func main() {
    ten := new(big.Int)
    ten.SetBytes([]byte(strconv.Itoa(10)))

    four := new(big.Int)
    four.SetBytes([]byte(strconv.Itoa(4)))

    tenmodfour := new(big.Int)
    tenmodfour = tenmodfour.Mod(ten, four)

    fmt.Println("mod", tenmodfour)

}
Run Code Online (Sandbox Code Playgroud)

我很可能出了点问题。哪里错了?

jul*_*enc 5

这是因为SetBytes没有按照您的想法做!使用SetInt64代替。

ten := new(big.Int)
ten.SetBytes([]byte(strconv.Itoa(10)))

four := new(big.Int)
four.SetBytes([]byte(strconv.Itoa(4)))

fmt.Println(ten, four)
Run Code Online (Sandbox Code Playgroud)

结果:

12592 52
Run Code Online (Sandbox Code Playgroud)

的确, 12592%52 == 8

如果要使用大于int64允许运算的数字,则还可以使用以下SetString功能:

n := new(big.Int)
n.SetString("456135478645413786350", 10)
Run Code Online (Sandbox Code Playgroud)