Cod sursa(job #251761)

Utilizator willliIonel Bratianu willli Data 3 februarie 2009 12:46:19
Problema Ciurul lui Eratosthenes Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define in "ciur.in"
#define out "ciur.out"
#define MAX 2000000

unsigned long sieve(unsigned long n)
{
	unsigned long nr, i, j, l, m;
	unsigned char s[MAX/2+1];
	
	if (n == 2)
	{
		return 1;
	} 
	nr = 1;
	m = n / 2 + 1;
	for (i = 3; i <= n; i+=2 )
	{
		if (s[i/2] == 0)
		{
			nr++;
			for (j = i/2; j <= m; j += i)
			{
				s[j] = 1;
			}
		
		}
	}

	return nr;	
}

int main()
{
	unsigned long n;
	FILE *fin, *fout;
	
	if ((fin = fopen(in, "r")) == NULL)
	{
		printf("Eroare \n");
		exit(-1);
	}
	fscanf(fin, "%ld", &n);
	fclose(fin);
	fout = fopen(out, "w");
	n = sieve(n);
	printf("%ld\n", n);
	fprintf(fout,"%ld", n);
	fclose(fout);
	return 0;
}