mirror of
https://github.com/golang/go
synced 2024-11-25 09:57:57 -07:00
Minor fixes and additions to the GMP wrapping.
R=rsc APPROVED=rsc DELTA=12 (11 added, 0 deleted, 1 changed) OCL=35715 CL=35715
This commit is contained in:
parent
b7ef541f35
commit
f554ef7816
@ -197,6 +197,9 @@ func (z *Int) SetString(s string, base int) os.Error {
|
|||||||
|
|
||||||
// String returns the decimal representation of z.
|
// String returns the decimal representation of z.
|
||||||
func (z *Int) String() string {
|
func (z *Int) String() string {
|
||||||
|
if z == nil {
|
||||||
|
return "nil";
|
||||||
|
}
|
||||||
z.doinit();
|
z.doinit();
|
||||||
p := C.mpz_get_str(nil, 10, &z.i[0]);
|
p := C.mpz_get_str(nil, 10, &z.i[0]);
|
||||||
s := C.GoString(p);
|
s := C.GoString(p);
|
||||||
@ -253,7 +256,7 @@ func (z *Int) Div(x, y *Int) *Int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mod sets z = x % y and returns z.
|
// Mod sets z = x % y and returns z.
|
||||||
// XXX Unlike in Go, the result is always positive.
|
// Like the result of the Go % operator, z has the same sign as x.
|
||||||
func (z *Int) Mod(x, y *Int) *Int {
|
func (z *Int) Mod(x, y *Int) *Int {
|
||||||
x.doinit();
|
x.doinit();
|
||||||
y.doinit();
|
y.doinit();
|
||||||
@ -361,3 +364,11 @@ func GcdInt(d, x, y, a, b *Int) {
|
|||||||
b.doinit();
|
b.doinit();
|
||||||
C.mpz_gcdext(&d.i[0], &x.i[0], &y.i[0], &a.i[0], &b.i[0]);
|
C.mpz_gcdext(&d.i[0], &x.i[0], &y.i[0], &a.i[0], &b.i[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProbablyPrime performs n Miller-Rabin tests to check whether z is prime.
|
||||||
|
// If it returns true, z is prime with probability 1 - 1/4^n.
|
||||||
|
// If it returns false, z is not prime.
|
||||||
|
func (z *Int) ProbablyPrime(n int) bool {
|
||||||
|
z.doinit();
|
||||||
|
return int(C.mpz_probab_prime_p(&z.i[0], C.int(n))) > 0;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user