Math-Prime-XS
view release on metacpan or search on metacpan
OUTPUT:
RETVAL
void
xs_mod_primes (number, base)
unsigned long number
unsigned long base
PROTOTYPE: $$
INIT:
unsigned long i, n;
PPCODE:
/* For the sqrt(), casting double->ulong probably follows the fpu
rounding mode, so might round either up or down. If up then the
last trial division may be unnecessary, but not harmful.
*/
/* special case for 2 if it's in range, then can use n+=2 for odd n in
the loop */
if (base <= 2) {
base = 3;
if (number >= 2) {
xs_sieve_primes (number, base)
unsigned long number
unsigned long base
PROTOTYPE: $$
ALIAS:
xs_sieve_count_primes = 1
INIT:
unsigned long *composite = NULL;
unsigned long i, n;
unsigned long count = 0;
PPCODE:
const unsigned long square_root = sqrt (number); /* truncates */
const unsigned int size_bits = sizeof (unsigned long) * BYTE_BITS;
Newxz (composite, (BIT_VECTOR (number) / size_bits) + 1, unsigned long);
for (n = 3; n <= square_root; n += 2) /* uneven numbers only */
{
/* (n * n) - start with square */
/* (2 * n) - skip even number */
for (i = (n * n); i <= number; i += (2 * n))
void
xs_sum_primes (number, base)
unsigned long number
unsigned long base
PROTOTYPE: $$
INIT:
unsigned long *primes = NULL, *sums = NULL;
unsigned int pos = 0;
unsigned long n;
PPCODE:
for (n = 2; n <= number; n++)
{
bool is_prime = TRUE;
const unsigned long square_root = sqrt (n); /* truncates */
unsigned int c;
for (c = 0; c < pos && primes[c] <= square_root; c++)
{
unsigned long sum = sums[c];
while (sum < n)
sum += primes[c];
void
xs_trial_primes (number, base)
unsigned long number
unsigned long base
PROTOTYPE: $$
INIT:
unsigned long *primes = NULL;
unsigned int pos = 0;
unsigned long start = 1;
unsigned long i, n;
PPCODE:
for (n = 2; n <= number; n++)
{
bool is_prime = TRUE;
unsigned long square_root; /* calculate later for efficiency */
if (n > 2 && EVEN_NUM (n))
continue;
square_root = sqrt (n); /* truncates */
for (i = start; i <= square_root; i++)
{
bool save_as_prime = TRUE;
( run in 0.829 second using v1.01-cache-2.11-cpan-5511b514fd6 )