#include <stdio.h>
#include <stdlib.h>
inline bool BitGet(unsigned int *x, unsigned int y)
{
    return x[y/32] >> (y % 32) & 1;
}
inline void BitSet(unsigned int *x, unsigned int y)
{
    x[y/32] |= 1 << (y % 32);
    return;
}
int main(int argc, char **argv, char **envp)
{
    unsigned int *map, i, j;
    const unsigned int max = 0xFFFF;

    map = (unsigned int *)calloc(max/32+(max%32 != 0), sizeof(int));
    if(map == NULL) return 0;
    for(i = 2; i <= max; i++){
        for(j = 2; j <= max / i; j++){
            BitSet(map, i*j);
        }
    }
    for(i = 2; i <= max; i++)
        if(!BitGet(map, i))
            printf("%d\n", i);

    free(map);
    return 0;
}