This is an automated email from the git hooks/post-receive script. ppm-guest pushed a commit to annotated tag v0.30 in repository libmath-prime-util-perl.
commit 937450cadc52c023f7aacd78a99250550fb18a5b Author: Dana Jacobsen <d...@acm.org> Date: Fri Jul 12 17:01:38 2013 -0700 Combine lots of functions with common signatures --- XS.xs | 160 ++++++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 103 insertions(+), 57 deletions(-) diff --git a/XS.xs b/XS.xs index bd36861..e12c7c0 100644 --- a/XS.xs +++ b/XS.xs @@ -179,22 +179,32 @@ _XS_prime_count(IN UV low, IN UV high = 0) RETVAL UV -_XS_legendre_pi(IN UV n) - -UV -_XS_meissel_pi(IN UV n) - -UV -_XS_lehmer_pi(IN UV n) - -UV -_XS_LMO_pi(IN UV n) - -UV _XS_nth_prime(IN UV n) - -int -_XS_is_aks_prime(IN UV n) + ALIAS: + _XS_next_prime = 1 + _XS_prev_prime = 2 + _XS_legendre_pi = 3 + _XS_meissel_pi = 4 + _XS_lehmer_pi = 5 + _XS_LMO_pi = 6 + _XS_divisor_sum = 7 + PREINIT: + UV ret; + CODE: + switch (ix) { + case 0: ret = _XS_nth_prime(n); break; + case 1: ret = _XS_next_prime(n); break; + case 2: ret = _XS_prev_prime(n); break; + case 3: ret = _XS_legendre_pi(n); break; + case 4: ret = _XS_meissel_pi(n); break; + case 5: ret = _XS_lehmer_pi(n); break; + case 6: ret = _XS_LMO_pi(n); break; + case 7: ret = _XS_divisor_sum(n); break; + default: croak("_XS_nth_prime: Unknown function alias"); break; + } + RETVAL = ret; + OUTPUT: + RETVAL UV @@ -466,31 +476,37 @@ _XS_lucas_sequence(IN UV n, IN IV P, IN IV Q, IN UV k) XPUSHs(sv_2mortal(newSVuv( Qk ))); int -_XS_is_lucas_pseudoprime(IN UV n) +_XS_is_prime(IN UV n) ALIAS: - _XS_is_strong_lucas_pseudoprime = 1 - _XS_is_extra_strong_lucas_pseudoprime = 2 - _XS_is_almost_extra_strong_lucas_pseudoprime = 3 - _XS_is_pari_lucas_pseudoprime = 4 + _XS_is_prob_prime = 1 + _XS_is_lucas_pseudoprime = 2 + _XS_is_strong_lucas_pseudoprime = 3 + _XS_is_extra_strong_lucas_pseudoprime = 4 _XS_is_frobenius_underwood_pseudoprime = 5 + _XS_is_aks_prime = 6 + PREINIT: + int ret; CODE: switch (ix) { - case 0: RETVAL = _XS_is_lucas_pseudoprime(n, 0); break; - case 1: RETVAL = _XS_is_lucas_pseudoprime(n, 1); break; - case 2: RETVAL = _XS_is_lucas_pseudoprime(n, 2); break; - case 3: RETVAL = _XS_is_almost_extra_strong_lucas_pseudoprime(n,1);break; - case 4: RETVAL = _XS_is_almost_extra_strong_lucas_pseudoprime(n,2);break; - case 5: RETVAL = _XS_is_frobenius_underwood_pseudoprime(n); break; - default:RETVAL = 0; break; + case 0: ret = _XS_is_prime(n); break; + case 1: ret = _XS_is_prob_prime(n); break; + case 2: ret = _XS_is_lucas_pseudoprime(n, 0); break; + case 3: ret = _XS_is_lucas_pseudoprime(n, 1); break; + case 4: ret = _XS_is_lucas_pseudoprime(n, 2); break; + case 5: ret = _XS_is_frobenius_underwood_pseudoprime(n); break; + case 6: ret = _XS_is_aks_prime(n); break; + default: croak("_XS_is_prime: Unknown function alias"); break; } + RETVAL = ret; OUTPUT: RETVAL int -_XS_is_prob_prime(IN UV n) - -int -_XS_is_prime(IN UV n) +_XS_is_almost_extra_strong_lucas_pseudoprime(IN UV n, IN UV increment = 1) + CODE: + RETVAL = _XS_is_almost_extra_strong_lucas_pseudoprime(n, increment); + OUTPUT: + RETVAL int is_prime(IN SV* n) @@ -518,12 +534,6 @@ is_prime(IN SV* n) XSRETURN(1); } -UV -_XS_next_prime(IN UV n) - -UV -_XS_prev_prime(IN UV n) - void next_prime(IN SV* n) ALIAS: @@ -541,23 +551,41 @@ next_prime(IN SV* n) XSRETURN(1); } - double -_XS_ExponentialIntegral(double x) - -double -_XS_LogarithmicIntegral(double x) - -double -_XS_RiemannZeta(double x) +_XS_ExponentialIntegral(IN double x) + ALIAS: + _XS_LogarithmicIntegral = 1 + _XS_RiemannZeta = 2 + _XS_RiemannR = 3 + PREINIT: + double ret; CODE: - RETVAL = (double) ld_riemann_zeta(x); + switch (ix) { + case 0: ret = _XS_ExponentialIntegral(x); break; + case 1: ret = _XS_LogarithmicIntegral(x); break; + case 2: ret = (double) ld_riemann_zeta(x); break; + case 3: ret = _XS_RiemannR(x); break; + default: croak("_XS_ExponentialIntegral: Unknown function alias"); break; + } + RETVAL = ret; OUTPUT: RETVAL double -_XS_RiemannR(double x) - +_XS_chebyshev_theta(IN UV n) + ALIAS: + _XS_chebyshev_psi = 1 + PREINIT: + double ret; + CODE: + switch (ix) { + case 0: ret = _XS_chebyshev_theta(n); break; + case 1: ret = _XS_chebyshev_psi(n); break; + default: croak("_XS_chebyshev_theta: Unknown function alias"); break; + } + RETVAL = ret; + OUTPUT: + RETVAL void _XS_totient(IN UV lo, IN UV hi = 0) @@ -656,15 +684,6 @@ _XS_exp_mangoldt(IN UV n) OUTPUT: RETVAL -double -_XS_chebyshev_theta(IN UV n) - -double -_XS_chebyshev_psi(IN UV n) - -UV -_XS_divisor_sum(IN UV n) - int _validate_num(SV* n, ...) CODE: @@ -688,6 +707,33 @@ _validate_num(SV* n, ...) OUTPUT: RETVAL +UV +testfac (IN UV bits, IN UV num) + PREINIT: + UV n, i, nf, base, numfacs; + UV factors[64]; + CODE: + numfacs = 0; + base = 1 + (1UL << bits); + for (i = 0; i < num; i++) { + n = base+2*i; + nf = trial_factor(n, factors, 1001); + n = factors[--nf]; + if (_XS_is_prob_prime(n)) continue; + //numfacs += holf_factor(n, factors, 20000) - 1; + //numfacs += pminus1_factor(n, factors, 5000, 80000) - 1; + //numfacs += pminus1_factor(n, factors, 300, 60000) - 1; + numfacs += pplus1_factor(n, factors, 5000) - 1; + //numfacs += squfof_factor(n, factors, 20000) - 1; + //numfacs += racing_squfof_factor(n, factors, 10000) - 1; + //numfacs += pbrent_factor(n, factors, 1500, 3) - 1; + //numfacs += pplus1_factor(n, factors, 200) - 1; + //numfacs += lehman_factor(n, factors) - 1; + } + RETVAL = numfacs; + OUTPUT: + RETVAL + void forprimes (SV* block, IN SV* svbeg, IN SV* svend = 0) PROTOTYPE: &$;$ -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits