背景
Golangの基本型であるint64ではのため20桁程度(※)でoverflowを起こします。そのため、
math/bigパッケージのNewIntを使おうとするとoverflowのコンパイルエラーになります。
※正確には、符号付き64bit整数の最大値9223372036854775807(ギリギリ19桁)を超えるとoverflowします。
例えば、20桁の数16329805957987392833で試してみると、以下のようにconstant 16329805957987392833 overflows int64のコンパイルエラーとなります。
package main
import (
"fmt"
"math/big"
)
func main() {
n := big.NewInt(16329805957987392833) // constant 16329805957987392833 overflows int64
fmt.Println(n)
}
int64の最大値を超えるような大きな数をbig.Int型として扱いたいときは以下のようにすれば直接入力可能です。
package main
import (
"fmt"
"math/big"
)
const (
DECIMAL int = 10
)
func main() {
n, _ := new(big.Int).SetString("16329805957987392833", DECIMAL)
fmt.Println(n)
}
使った素数について
素数生成機をお借りして10桁の素数を2つ(7508269669,2174909357)生成し、積を計算したのが16329805957987392833です。