首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数学大软件包的金模数

使用数学大软件包的金模数
EN

Stack Overflow用户
提问于 2014-06-07 15:53:05
回答 2查看 6.4K关注 0票数 4

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

Mod将z设为y != 0的模x%y,并返回z。如果y == 0,则会发生除以零的运行时恐慌。国防部实现欧几里德模数(不像Go);更多细节请参见DivMod。

10%4 =2,但我用这个得到8(使用数学/大包来做同样的事情)- 86etDvLYq

代码语言:javascript
复制
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)

}

我很可能出了什么问题。哪里弄错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-07 16:05:25

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

代码语言:javascript
复制
ten := new(big.Int)
ten.SetBytes([]byte(strconv.Itoa(10)))

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

fmt.Println(ten, four)

结果:

代码语言:javascript
复制
12592 52

事实上,12592%52 == 8

如果您想使用大于int64允许您操作的数字,也可以使用SetString函数:

代码语言:javascript
复制
n := new(big.Int)
n.SetString("456135478645413786350", 10)
票数 6
EN

Stack Overflow用户

发布于 2014-06-07 18:52:05

除了julienc的答案之外,如果要使用SetBytes,就必须将数字转换为像this这样的字节:

代码语言:javascript
复制
func int2bytes(num int) (b []byte) {
    b = make([]byte, 4)
    binary.BigEndian.PutUint32(b, uint32(num))
    return
}
func main() {
    ten := new(big.Int)
    ten.SetBytes(int2bytes(10))

    four := new(big.Int)
    four.SetBytes(int2bytes(4))

    fmt.Println(ten, four)

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

    fmt.Println("mod", tenmodfour)
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24098959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档