Math-Factor-XS
view release on metacpan or search on metacpan
MODULE = Math::Factor::XS PACKAGE = Math::Factor::XS
void
factors (number)
unsigned long number
PROTOTYPE: $
INIT:
unsigned long i, square_root;
AV *factors;
PPCODE:
/* range check */
{
double d = SvNV(ST(0));
if (! (d >= 0 && d < double_ulong_max_plus_1)) {
croak ("Cannot factors() on %g", d);
}
}
factors = newAV ();
square_root = sqrt (number);
unsigned long number
SV *factors_aref
PROTOTYPE: $\@
INIT:
AV *factors;
unsigned long *prev_base = NULL;
unsigned int b, c, p = 0;
unsigned int top = items - 1;
bool Skip_multiples = FALSE;
bool skip = FALSE;
PPCODE:
factors = (AV*)SvRV (factors_aref);
if (av_len (factors) == -1)
XSRETURN_EMPTY;
if (SvROK (ST(top)) && SvTYPE (SvRV(ST(top))) == SVt_PVHV)
{
const char *opt = "skip_multiples";
unsigned int len = strlen (opt);
HV *opts = (HV*)SvRV (ST(top));
#
void
prime_factors (number)
unsigned long number
ALIAS:
count_prime_factors = 1
INIT:
unsigned long i, limit;
unsigned incr;
unsigned long count = 0;
PPCODE:
/* range check */
{
double d = SvNV(ST(0));
if (! (d >= 0 && d < double_ulong_max_plus_1)) {
croak ("Cannot prime_factors() on %g", d);
}
}
if (number > 0) {
/* or perhaps __builtin_ctz() in new enough gcc, but usually there
( run in 1.157 second using v1.01-cache-2.11-cpan-5511b514fd6 )