/*
**	program to print out sieved numbers
*/

#include	<stdio.h>
#include	<memory.h>

#define	LARGEST_N	65535		/* largest N program can handle */

extern void	sieve(int n, char a[]);

void usage(char *s)
{
	fprintf(stderr, "Usage: %s n (where 1 < n <= %d\n)", s, LARGEST_N);
	exit(1);
}

int main(int argc, char *argv[])
{
	int	i, n;
	int	byte, bit;
	char	a[LARGEST_N / 8];

	/* check command line arguments */
	if (argc != 2)
		usage(argv[0]);	/* doesn't have one argument */
	n = atoi(argv[1]);
	if (n <= 1 || n > LARGEST_N)
		usage(argv[0]);	/* value of n out of range */
	(void)memset(a, 0xff, sizeof(a));
	sieve(n, a);
	printf("Primes up to %d\n", n);
	for (i = 2; i <= n; i++)
	{
		byte = i >> 3;	/* index into a */
		bit = i & 7;	/* bit number within a */
		if (a[byte] & (1 << bit))	/* is bit set? */
			printf("%d\n", i);
	}
	return 0;
}

