背景
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
です。