Monday, December 23, 2013

Advanced Seive Algorithm

#include <stdio.h>
#include <string.h>

static char sieve[131072];
#define PRIMEP(n) (((sieve[(n) >> 3] >> ((n) & 7)) & 1) == 0)

static void mksieve() {
    register int i, j;
    memset(sieve, 0x55, sizeof(sieve));
    for(sieve[0] = 0x53, i = 3; i < 1024; i += 2)
        if(PRIMEP(i))
            for(j = i * i; j < 1048576; j += i)
                 sieve[j >> 3] |= 1 << (j & 7);               
       
}

int main() {
    mksieve();

    int k;
    for(k = 2; k <= 100; k++)
       if(PRIMEP(k))
          printf("%d ", k);
    return 0;
}

No comments:

Post a Comment