Cod sursa(job #789038)

Utilizator f.v.antonFlavius Anton f.v.anton Data 16 septembrie 2012 16:59:18
Problema Ciurul lui Eratosthenes Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.58 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void mark(char *ciur, int prime, int N)
{
	int i;
	for (i = 2 * prime; i <= N; i+= prime)
		ciur[i] = 1;
}

int main()
{
	int N, i, limit, count = 1; /* two's */
	FILE *f = fopen("ciur.in", "rt");
	FILE *g = fopen("ciur.out", "wt");
	char *ciur = NULL;
	
	
	fscanf(f, "%d", &N);
	limit = sqrt(N);
	ciur = calloc(N+1, sizeof(char));

	for (i = 2; i <= limit; i++)
		if (!ciur[i])
			mark(ciur, i, N);
	
	for (i = 3; i <= N; i+=2)
		if (!ciur[i])
			count++;

	fprintf(g, "%d", count);

	fclose(f);
	fclose(g);
	free(ciur);
	return 0;
}