Cod sursa(job #1358356)

Utilizator cristian.enciuCristian Enciu cristian.enciu Data 24 februarie 2015 16:06:54
Problema Ciurul lui Eratosthenes Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<stdio.h>

unsigned int v[2000050/32];

int main()
{
	freopen("ciur.in", "r", stdin);
	freopen("ciur.out", "w", stdout);

	int n, count = 0;

	scanf("%d", &n); 

	int r_n = n;
	n = n/32 + 1;
	int lim = r_n < 32 ? r_n : 32;

	for(int i = 0 ; i < n ; ++i) {
		v[i] = (1 << 32) - 1;
	}

	int j = 2;
	for(int i = 0 ; i < n ; ++i) {
		for(; j < lim ; ++j) {
			if(v[i] & (1 << j)) {
				++count;

				int nr = i * 32 + j;
				for(int k = nr ; k <= r_n ; k += nr) {
					int x = k / 32;
					int y = k % 32;

					v[x] &= ~(1 << y);
				}
			}
		}

		j = 0;
	}


	printf("%d", count);

	return 0;
}