我开发了Golang软件包BESON,用于进行大数运算。
Multiply操作码:
func Multiply(a []byte, b []byte) {
ans := make([]byte, len(a) + len(b))
bits := nbits(b)
var i uint
for i = bits - 1; int(i) >= 0; i-- {
byteNum := i >> 3
bitNum := i & 7
LeftShift(ans, 1, 0)
if (b[byteNum] & (1 << bitNum)) > 0 {
Add(ans, a)
}
}
copy(a, ans)
}
我的方法是将a
的每b
个乘以位加起来。
有没有更有效的方法来实现Multiply
?
修改
BESON包在字节数组中代表一个大数字。例如,它代表大小为16的字节数组中的一个128位无符号整数。因此,当进行两个128位无符号整数相乘时,它实际上是在将两个字节数组相乘。
示例:
a
,b
a = []byte{ 204, 19, 46, 255, 0, 0, 0, 0 }
b = []byte{ 117, 10, 68, 47, 0, 0, 0, 0 }
Multiply(a, b)
fmt.Println(a)
a
(结果将写回到a
)[60 4 5 35 76 72 29 47]