import "big"

大きな整数の演算を実装しています。下に示す数値型をサポートしています。

- Int	符号付整数
- Rat	有理数

Int型のすべてのメソッドはレシーバ自身を戻り値として返します。レシーバとオペランドが同一のときはレシーバが計算結果で上書きされます(メモリは再利用されます)。メソッドが必ず結果を返すので、連続した操作が可能です。

パッケージファイル

arith.go arith_decl.go int.go nat.go rat.go

GcdInt関数

func GcdInt(d, x, y, a, b *Int)

GcdInt は、aとbの最大公約数をdにセットします。aとbには正の値を指定してください。
xとyがにnilでないときはGcdIntはx,yに d = a*x + b*y となるような値をセットします。
もしaかbにマイナス値を指定した場合、d, x, yの3つすべてに0がセットされます。

ProbablyPrime関数

func ProbablyPrime(z *Int, n int) bool

ProbablyPrimeは、ミラー-ラビン素数判定法によりzが素数か判定します。trueが返ればzは1 – 1/4^nの確率で素数です。falseが返ればzは素数ではありません。

Int型

Int型は、値の大きな符号付整数を扱います。Int型のゼロ値は値0を表します。

type Int struct {
    // contains unexported fields
}

NewInt関数

func NewInt(x int64) *Int

NewIntは、新しいIntを作成してxをセットした後、作成したIntを返します。

(*Int) Abs関数

func (z *Int) Abs(x *Int) *Int

Absは、zに|x|(xの絶対値)をセットし、zを返します。

(*Int) Add関数

func (z *Int) Add(x, y *Int) *Int

Addは 、zにx + yの合計をセットし、zを返します。

(*Int) And関数

func (z *Int) And(x, y *Int) *Int

Andは、zにx & yをセットし、zを返します。

(*Int) AndNot関数

func (z *Int) AndNot(x, y *Int) *Int

AndNotは、zにx &^ yをセットし、zを返します。

(*Int) Binomial関数

func (z *Int) Binomial(n, k int64) *Int

Binomialは、zに(n, k)の二項係数をセットし、zを返します。

(*Int) BitLen関数

func (z *Int) BitLen() int

BitLenは、zの絶対値のビット長を返します。0のビット長は0です。

(*Int) Bytes関数

func (z *Int) Bytes() []byte

Bytesは、zをビッグエンディアンのバイト配列とみなし、その絶対値を返します。

(*Int) Cmp関数

func (x *Int) Cmp(y *Int) (r int)

Cmpは、xとyを比較し、次の結果を返します。

-1 if x <  y
 0 if x == y
+1 if x >  y

(*Int) Div関数

func (z *Int) Div(x, y *Int) (q, r *Int)

Divは、y != 0のとき、zにx / yの商をセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はDivModを参照ください。

(*Int) DivMod関数

func (z *Int) DivMod(x, y, m *Int) (*Int, *Int)

DivModは、y != 0のとき、xをyで割った商zと、xをyで割った余りmを算出し、対の値(z, m)を返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。

DivModは、ユークリッドの除算と余りの計算を実装しています。(Goにおける計算とは異なります)

q = x div y  such that
m = x - y*q  with 0 <= m < |q|

(参考資料:Raymond T. Boute, “The Euclidean definition of the functions div and mod”. ACM Transactions on Programming Languages and Systems (TOPLAS), 14(2):127-144, New York, NY, USA, 4/1992. ACM press.)

(*Int) Exp関数

func (z *Int) Exp(x, y, m *Int) *Int

Expは、 z = x**y mod m を計算します。mがnilのときは z = x**y を計算します。参考資料:Knuth, volume 2, section 4.6.3

(*Int) Format関数

func (x *Int) Format(s fmt.State, ch int)

Formatは、fmt.Formatter用のサポートルーチンです。この関数は、フォーマットとして’b’ (2進数)、’o’ (8進数)、’d’ (10進数)、’x’ (16進数)を受け付けます。

(*Int) Int64関数

func (x *Int) Int64() int64

Int64は、xのint64表現を返します。xがint64で表せないときの戻り値は未定義です。

(*Int) Lsh関数

func (z *Int) Lsh(x *Int, n uint) *Int

Lsh sets z = x << n and returns z.

(*Int) Mod関数

func (z *Int) Mod(x, y *Int) *Int

Modは、y != 0のとき、zにx % yの余りをセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はDivModを参照ください。

(*Int) ModInverse関数

func (z *Int) ModInverse(g, p *Int) *Int

ModInverseは、zに、ℤ/pℤ(pが素数のとき)群内におけるgの逆数をセットし、zを返します。

(*Int) Mul関数

func (z *Int) Mul(x, y *Int) *Int

Mulは、zにx*yの積をセットし、zを返します。

(*Int) MulRange関数

func (z *Int) MulRange(a, b int64) *Int

MulRangeは、zに[a, b]の範囲内のすべての整数の積をセットし、zを返します。範囲が空のとき(a > b)は、1を返します。

(*Int) Neg関数

func (z *Int) Neg(x *Int) *Int

Negは、zに-xをセットし、zを返します。

(*Int) Not関数

func (z *Int) Not(x *Int) *Int

Notは、zに^xをセットし、xを返します。

(*Int) Or関数

func (z *Int) Or(x, y *Int) *Int

Orは、zにx | yをセットし、zを返します。

(*Int) Quo関数

func (z *Int) Quo(x, y *Int) *Int

Quoは、y != 0のとき、zにx / yの商をセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はQuoRemを参照ください。

(*Int) QuoRem関数

func (z *Int) QuoRem(x, y, r *Int) (*Int, *Int)

QuoRemは、y != 0のとき、xをyで割った商zと、xをyで割った余りrを算出し、対の値(z, r)を返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。

QuoRemは、T-divisionによる除算と余りの計算を実装しています。(Goにおける計算とは異なります)

q = x/y      結果はゼロ方向に切り捨て
r = x - y*q

(参考資料:Daan Leijen, “Division and Modulus for Computer Scientists”)

(*Int) Rand関数

func (z *Int) Rand(rnd *rand.Rand, n *Int) *Int

Randは、zに[0, n)内の擬似乱数をセットし、zを返します。

(*Int) Rem関数

func (z *Int) Rem(x, y *Int) *Int

Remは、y != 0のとき、zにx % yの余りをセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はQuoRemを参照ください。

(*Int) Rsh関数

func (z *Int) Rsh(x *Int, n uint) *Int

Rshは 、z = x >> n を計算し、zを返します。

(*Int) Set関数

func (z *Int) Set(x *Int) *Int

Setは、xをzにセットし、zを返します。

(*Int) SetBytes関数

func (z *Int) SetBytes(b []byte) *Int

SetBytesは、bを符号なし整数のビッグエンディアンのバイト列として解析し、zに結果をセットします。

(*Int) SetInt64関数

func (z *Int) SetInt64(x int64) *Int

SetInt64 sets z to x and returns z.

(*Int) SetString関数

func (z *Int) SetString(s string, base int) (*Int, bool)

SetString は、baseを基数とするsの値をzにセットし、zおよび、成否を示す論理値を返します。SetStringに失敗したときのzの値は規定されていません。

base引数の値が0のとき、文字列のプレフィックスから基数が判定されます。0xまたは0Xは16進数、0は8進数、0bまたは0Bは2進数、それ以外は10進数となります。

(*Int) Sign関数

func (x *Int) Sign() int

Signは、 次の結果を返します。

-1 if x <  0
 0 if x == 0
+1 if x >  0

(*Int) String関数

func (x *Int) String() string

(*Int) Sub関数

func (z *Int) Sub(x, y *Int) *Int

Subは、zにx-yの差をセットし、zを返します。

(*Int) Xor関数

func (z *Int) Xor(x, y *Int) *Int

Xorは、zにx ^ yをセットし、zを返します。

Rat型

Ratは、任意精度のa/bの商を表します。Ratのゼロ値は、0/0であり、これは有効なRatではありません。

type Rat struct {
    // contains unexported fields
}

NewRat関数

func NewRat(a, b int64) *Rat

NewRatは、分子aと分母bを持つ新しいRatを作成します。

(*Rat) Abs関数

func (z *Rat) Abs(x *Rat) *Rat

Absは、zに|x|(xの絶対値)をセットし、zを返します。

(*Rat) Add関数

func (z *Rat) Add(x, y *Rat) *Rat

Addは、zにx+yの合計をセットし、zを返します。

(*Rat) Cmp関数

func (x *Rat) Cmp(y *Rat) (r int)

Cmpは、xとyを比較し、次の結果を返します。

-1 if x <  y
 0 if x == y
+1 if x >  y

(*Rat) Denom関数

func (z *Rat) Denom() *Int

Demomは、zの分母を返します。この値は常に0より大きい値です。この結果は、zの分母の参照であるため、zに新しく値が代入されると値が変わります。

(*Rat) FloatString関数

func (z *Rat) FloatString(prec int) string

FloatStringは、zの小数点形式の文字列表現を返します。小数点以下の精度はprec桁数で、最後の桁は丸められます。

(*Rat) IsInt関数

func (x *Rat) IsInt() bool

IsIntは、xの分母が1のとき、trueを返します。returns true if the denominator of x is 1.

(*Rat) Mul関数

func (z *Rat) Mul(x, y *Rat) *Rat

Mulは、zにx * yの積をセットし、zを返します。

(*Rat) Neg関数

func (z *Rat) Neg(x *Rat) *Rat

Negは、zに-xをセット(必要に応じでxのコピーを作成して)し、zを返します。

(*Rat) Num関数

func (z *Rat) Num() *Int

Numは、zの分子を返します。この値は、0以下になることがあります。この結果は、zの分子の参照であるため、zに新しく値が代入されると値が変わります。

(*Rat) Quo関数

func (z *Rat) Quo(x, y *Rat) *Rat

Quoは、zにx / yの商をセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。

(*Rat) RatString関数

func (z *Rat) RatString() string

RatStringは、zの文字列表現を、b != 1のときは、「a/b」形式で、b == 1のときは、「a」形式で返します。

(*Rat) Set関数

func (z *Rat) Set(x *Rat) *Rat

Setは、zにxをセット(必要に応じでxのコピーを作成して)し、zを返します。

(*Rat) SetFrac関数

func (z *Rat) SetFrac(a, b *Int) *Rat

SetFracは、zにa/bをセットし、zを返します。

(*Rat) SetFrac64関数

func (z *Rat) SetFrac64(a, b int64) *Rat

SetFrac64は、zにa/bをセットし、zを返します。

(*Rat) SetInt関数

func (z *Rat) SetInt(x *Int) *Rat

SetIntは、zにxをセット(必要に応じでxのコピーを作成して)し、zを返します。

(*Rat) SetInt64関数

func (z *Rat) SetInt64(x int64) *Rat

SetInt64は、zにxをセットし、zを返します。

(*Rat) SetString関数

func (z *Rat) SetString(s string) (*Rat, bool)

SetStringは、zにsの値をセットし、zおよび、成否を示す論理値を返します。sには、分数「a/b」、または浮動小数値(オプションで指数を伴える)を指定できます。処理に失敗したときのzの値は規定されていません。

(*Rat) Sign関数

func (x *Rat) Sign() int

Signは、 次の結果を返します。

-1 if x <  0
 0 if x == 0
+1 if x >  0

(*Rat) String関数

func (z *Rat) String() string

Stringは、zの「a/b」形式の文字列表現を返します。(b == 1のときも)

(*Rat) Sub関数

func (z *Rat) Sub(x, y *Rat) *Rat

Subは、zにx - yの差をセットし、zを返します。

Word型

type Word uintptr