From 2d2d6fbb665d731255362589f58b4a0f756b2078 Mon Sep 17 00:00:00 2001 From: Philipp Marek Date: Tue, 3 Mar 2020 19:51:37 +0100 Subject: [PATCH] Added SB-GMP:MPZ-DIVISIBLE-P. --- contrib/sb-gmp/gmp.lisp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/contrib/sb-gmp/gmp.lisp b/contrib/sb-gmp/gmp.lisp index dc21f6b5d7..b60de61d8a 100644 --- a/contrib/sb-gmp/gmp.lisp +++ b/contrib/sb-gmp/gmp.lisp @@ -18,6 +18,7 @@ #:mpz-powm #:mpz-pow #:mpz-gcd + #:mpz-divisible-p #:mpz-lcm #:mpz-sqrt #:mpz-probably-prime-p @@ -246,6 +247,7 @@ pre-allocated bignum. The allocated bignum-length must be (1+ COUNT)." (declaim (inline __gmpz_mul_2exp __gmpz_fdiv_q_2exp __gmpz_pow_ui + __gmpz_divisible_p __gmpz_probab_prime_p __gmpz_fac_ui __gmpz_2fac_ui @@ -270,6 +272,10 @@ pre-allocated bignum. The allocated bignum-length must be (1+ COUNT)." (b (* (struct gmpint))) (e unsigned-long)) +(define-alien-routine __gmpz_divisible_p int + (n (* (struct gmpint))) + (d (* (struct gmpint)))) + (define-alien-routine __gmpz_probab_prime_p int (n (* (struct gmpint))) (reps int)) @@ -461,6 +467,16 @@ pre-allocated bignum. The allocated bignum-length must be (1+ COUNT)." (/= 0 (slot result 'mp_size))) (__gmpz_add (addr result) (addr result) (addr gb)))))) +(defun mpz-divisible-p (n d) + "Returns T if (ZEROP (MOD N D))." + (declare (optimize (speed 3) (space 3) (safety 0)) + (type integer n d)) + (with-mpz-vars ((n gn) (d gd)) + (not + (zerop + (__gmpz_divisible_p (addr gn) (addr gd)))))) + + (defgmpfun mpz-cdiv (n d) (let ((size (1+ (max (blength n) (blength d)))))