All pastes #551491 Raw Edit

sieve of eratosthenes

public c v1 · immutable
·published 2007-06-08 20:29 UTC
rendered paste body
#include <stdlib.h>#include <stdio.h>int get_bit(unsigned char *v, int offset){        offset--;        int a = offset / 8;        int b = offset % 8;        return v[a] & (1 << b) ? 1 : 0;}void set_bit(unsigned char *v, int offset){        offset--;        int a = offset / 8;        int b = offset % 8;        v[a] |= 1 << b;}void sieve_of_eratosthenes(unsigned char *numbers, unsigned char *primes, int N){        set_bit(numbers,1);        for (int k=2;k<=N;k++) {                if (!get_bit(numbers,k)) {                        set_bit(primes,k);                        set_bit(numbers,k);                        for (int l=k+1;l<=N;l++) {                                if (get_bit(numbers, l)) continue;                                if (l % k == 0) {                                        set_bit(numbers,l);                                }                        }                }        }}int main(){        unsigned char *numbers = (unsigned char*) calloc(10000000/8+1,1);        unsigned char *primes = (unsigned char*) calloc(10000000/8+1,1);        sieve_of_eratosthenes(numbers,primes,100);        for (int k=0;k<100;k++) {                if (get_bit(primes,k)) {                        printf("%10d is a prime\n", k);                }        }        return 0;}