Cod sursa(job #1175899)

Utilizator cosgbCosmin cosgb Data 25 aprilie 2014 02:30:52
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <vector>

const int dim = 2000000 / 8 + 1;

using namespace std;


bool isBitSet(char byte, short int bit)
{
	return byte & (1 << bit);
}

void setBit(char &byte, short int bit)
{
	byte |= (1 << bit);
}

unsigned int ciur(int N, vector <char> numbers) 
{
	unsigned int num;
	unsigned int count = 0;
	for (num = 2; num <= N; ++num) {
		if (!isBitSet(numbers[num / 8], num % 8)) {
			++count;
			for (int i = 2 * num; i <= N; i += num) {
				setBit(numbers[i / 8], i % 8);
			}
		}
	}
	return count;
}

int main()
{
	ifstream input;
	ofstream output;
	input.open("ciur.in");
	output.open("ciur.out");
	
	int N;
	vector<char> numbers(dim, 0);

	input >> N;
	output << ciur(N, numbers);

	input.close();
	output.close();

	return 0;
}