/* primes.c */
/* Copyright 1992 by P.J. LaBrocca */

#include <stdlib.h>
#include "mixed.h"

#define NUM 16000     /* highest number to check for being prime */

Integer Primes[ 2000 ];

void init_primes( void )
{
    char *mark = malloc(NUM * sizeof(char) );
    Integer *pr = Primes;  /* point to global array */
    Integer j, k;

    for(j = 0; j < NUM; ++j)
        mark[j] = 1;     /* mark everything prime */
    for(j = 4; j < NUM; j += 2)
        mark[j] = 0;     /* scratch off all the even numbers ... */
    *pr++ = 2;           /* ... except for 2; put it in primes array */
    for(j = 3; j < NUM; j += 2)  /* check each odd number: */
        if(mark[j]) {            /* if it's marked... */
            *pr++ = j;           /* ..record it in array.. */
            for(k = j + j; k < NUM; k += j)
                mark[k] = 0;     /* ..and scratch off all its multiples */
        }
    free( mark );
}
#undef NUM

