Cod sursa(job #2163814)

Utilizator 24601Dan Ban 24601 Data 12 martie 2018 20:04:16
Problema Ciurul lui Eratosthenes Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.59 kb
#include <stdio.h>
#include <limits.h>

#define NMAX 2000000 / CHAR_BIT

#define GET_BIT(x) (ciur[(x) / CHAR_BIT] & (1 << (x & (CHAR_BIT - 1))))
#define SET_BIT(x) (ciur[(x) / CHAR_BIT] |= (1 << (x & (CHAR_BIT - 1))))

static char ciur[NMAX];

static int prime(int n)
{
	int i, j, cnt;

	for (cnt = 0, i = 2; i * i <= n; i++) {
		if (GET_BIT(i) == 0) {
		    cnt++;
			for (j = i * i; j <= n; j += i) {
				SET_BIT(j);
			}
		}
	}

	return cnt;
}

int main(void)
{
	int n;

	freopen("ciur.in", "r", stdin);
	freopen("ciur.in", "w", stdout);

	scanf("%d", &n);
	printf("%d", prime(n));

	return 0;
}